私はモデルを使ってゲームをしています。レンダリングすると、CPU使用率が高くなります(1つのモデルにつき約10%)。私はを使用して、DisplayFunc
を1秒間に60回呼び出します。 glPushMatrixCPU使用率の高いOpenGLゲームでモデル(テクスチャ付きメッシュ)を正しくレンダリングするにはどうすればよいですか?
- です
- glTranslatef、glRotatef、glScalef
- glMaterialfvテクスチャのための材料は、私は私のテクスチャ三角形その後、顔のためのループで
- ため
- glBeginをバインドするようglNormal3f私はそこの機能を描画呼び出し、glTexCoord2f、glVertex3f、三角形用
- glEnd
- およびglPopMatrix
私は何が間違っているのかわからないし、足場もないので、私はここで尋ねています。
わかりましたので、私は簡単な修正を行いました。
#include <GL/glut.h>
#include <gl/glext.h>
void Display();
void Reshape(int width, int height);
const int windowWidth = 480;
const int windowHeight = 270;
GLuint vertexbuffer;
static const GLfloat g_vertex_buffer_data[] =
{
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(windowWidth, windowHeight);
glutCreateWindow("Modern OpenGL");
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutIdleFunc(Display);
GLfloat reset_ambient[4] = { 0.0f, 0.0f, 0.0f, 1.0f };
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, reset_ambient);
glEnable(GL_LIGHTING);
glShadeModel(GL_SMOOTH);
glEnable(GL_LIGHT0);
glGenBuffers(1, &vertexbuffer);
glutMainLoop();
return 0;
}
void Display()
{
glClearColor(1.0, 1.0, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0,0,10,0,0,0,0,1,0);
GLfloat light0amb[4] = { 1.0, 1.0, 1.0, 1.0 };
glLightfv(GL_LIGHT0, GL_AMBIENT, light0amb);
GLfloat light0dif[4] = { 1.0, 1.0, 1.0, 1.0 };
glLightfv(GL_LIGHT0, GL_DIFFUSE, light0dif);
GLfloat light0spe[4] = { 1.0, 1.0, 1.0, 1.0 };
glLightfv(GL_LIGHT0, GL_SPECULAR, light0spe);
GLfloat light0pos[4] = { 0.0, 0.0, 0.0, 1.0 };
glLightfv(GL_LIGHT0, GL_POSITION, light0pos);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glVertexAttribPointer(
0,
3,
GL_FLOAT,
GL_FALSE,
0,
(void*)0
);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
glFlush();
glutSwapBuffers();
}
void Reshape(int width, int height)
{
glutReshapeWindow(windowWidth, windowHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0, 0, width, height);
gluPerspective(45.0f, width/(double)height, 0.1f, 1000.0f);
glMatrixMode(GL_MODELVIEW);
}
廃止予定の 'glBegin' /' glEnd' APIと固定パイプラインAPIの使用を止め、頂点バッファとシェーダに切り替えるべきです。 [この質問を参照してください。](http://stackoverflow.com/questions/14300569/opengl-glbegin-glend) – VTT
私はある種のopenglのnoobですが、正しくカリングをしていますか? https://learnopengl.com/#!Advanced-OpenGL/Face-culling –
@VTTあなたが追加したものについてコメントすることができますか? – ground0