void setupViewPort(GLint width, GLint height) {
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
GLfloat aspect = (GLfloat)width / (GLfloat)height;
glFrustumf(-1.0f, 1.0f, -1.0 / aspect, 1.0 / aspect, 1.5f, 40.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, 0, 5, //eyeXYZ
0.0f, 0.0f, -1.0f, //centerXYZ
0.0f, 1.0f, 0.0f);
}
和 - - - - - - - - - - - - - - - - - - - - - - - - - ----------------------------
void eglInitSetting(GLManager* _glManager) {
glManager = _glManager;
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glDepthMask(true);
}
和 - - - - - - - - - - - - - - - - - - - - - - - - - ----------------------------
void eglInitDrawingObject() {
rect = new GLRectangle();
tri = new GLTriangle();
circle = new GLCircle();
sphere = new GLSphere();
cube = new GLCube();
point = new GLPoint();
ecube = new GLECube();
//initailize each oject...
glManager->object()->push_back(rect);
glManager->object()->push_back(tri);
glManager->object()->push_back(circle);
glManager->object()->push_back(sphere);
glManager->object()->push_back(cube);
glManager->object()->push_back(point);
glManager->object()->push_back(ecube);
}
和.... - - - - - - - - - - - - - - - - - - - - - - - --------------------------------
void eglDraw() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
i += 3;
GLfloat angle = (float)(M_PI / 180.0f) * i;
GLfloat x = (float)(cos(angle));
GLfloat y = (float)(sin(angle));
//GLfloat z = (float)0.0f;
point->move(x, y, 0.0f);
sphere->rotate(0.0f, ry += 0.5f, 0.0f);
rect->rotate(rx += 0.5f, 0.0f, 0.0f);
cube->rotate(rx, ry, 0.0f);
ecube->rotate(rx, ry, 0.0f);
tri->rotate(0.0f, 0.0f, rz += 100.0f);
circle->rotate(0.0f, 0.0f, rz += 100.0f);
glManager->object()->drawAll();
glFlush();
}
最后.. - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------
static int engine_init_display(struct engine* engine) {
setupViewPort(engine->width, engine->height);
GLManager* glManager;
glManager = GLManager::getInstance();
glManager->object()->clearAll();
glManager->setAssetManager(engine->app->activity->assetManager);
eglInitSetting(glManager);
eglInitDrawingObject();
return 0;
}
static void engine_draw_frame(struct engine* engine) {
if (engine->display == NULL) {
// No display.
return;
}
eglDraw();
eglSwapBuffers(engine->display, engine->surface);
}
当我画一个立方体...
多维数据集显示不正确。
当我在android java版本上使用相同的代码时,win32 opengl
它画得完美..
请帮我..
我应该怎么办?
这可能是因为您没有深度缓冲区。在为渲染上下文选择EGL配置时,请确保您请求的配置带有深度条目。
PS不相关,但请勿glFlush()
手动致电。调用eglSwapBuffers()会在需要时自动刷新,多余的刷新可能会导致多余的GPU处理。相信司机做正确的事...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句