OpenGLを使いグラフィクスの2D変換を行っているのですが、3Dグラフィクスwith GLUTこちらのサイトを見ていただければ、2D変換の順序として、
[a]モデリング変換M(ワールド座標変換へ)→
[b]視野変換V(カメラ座標系へ)→
[c]投影変換P(投影座標系へ)→
[d]ビューポート変換U(ビューポートへ)
という流れで説明しているのですが、ソースコードの書き方は全くの逆ので
[d]ビューポート変換U(ビューポートへ)
[c]投影変換P(投影座標系へ)→
[b]視野変換V(カメラ座標系へ)→
[a]モデリング変換M(ワールド座標変換へ)→
オブジェクト生成
という流れなのですが、コンピュータ内ではソースコードはどのような順序で処理されているのでしょうか?
どなたかわかる方おしえてください<(_ _)>
OpenGL
1#include "glut.h" 2#include <stdio.h> 3 4int windowWidth = 800; 5int windowHeight = 685; 6void display(void) { 7 glClear(GL_COLOR_BUFFER_BIT);//GLbitfield mask 8 9 glMatrixMode(GL_PROJECTION);//投影変換行列モードに切り替える 10 glLoadIdentity();//投影行列を単位行列に初期化 11 gluOrtho2D(//投影変換をする範囲を指定する 12 0, // GLdouble left 13 windowWidth, // GLdouble right 14 windowHeight, // GLdouble bottom 15 0); // GLdouble top 16 17 glMatrixMode(GL_MODELVIEW);//モデリング変換 18 glLoadIdentity();//モデリング行列を単位行列に初期化 19 20 glTranslatef(windowWidth / 2, windowHeight / 2, 0);//GLfloat x,y,z 21 22 static float angle; 23 angle += 1; 24 glRotated( 25 angle, //GLdouble angle, 26 0, 0, 1); //GLdouble x, y, z 27 glScalef(256,256,1); 28 glutWireTeapot(1); 29 glutSwapBuffers(); 30} 31 32void timer(int value) { 33 glutPostRedisplay();//システムに対して再描画をお願いする 34 35 glutTimerFunc( 36 1000/60,//unsigned int millis 37 timer, //void (GLUTCALLBACK *func)(int value) 38 0); // int value 39} 40 41void reshape(int width, int height) { 42 printf("reshape: width:%d height:%d\n", width, height); 43 glViewport( 44 0,0,//GLint x, y 45 windowWidth, windowHeight//GLsizei width, height 46 ); 47 windowWidth = width; 48 windowHeight = height; 49} 50 51int main(int argc,char*argv[]) { 52 glutInit( 53 &argc,//int *argcp 54 argv);//char **argv 55 glutInitDisplayMode(GL_DOUBLE); 56 glutInitWindowPosition(0,0); 57 glutInitWindowSize(windowWidth, windowHeight); 58 glutCreateWindow("title"); 59 glutDisplayFunc(display);//void (GLUTCALLBACK *func)(void) 60 glutTimerFunc( 61 0,//unsigned int millis 62 timer,//void (GLUTCALLBACK *func)(int value) 63 0);// int value 64 glutReshapeFunc(reshape);//void (GLUTCALLBACK *func)(int width, int height) 65 66 glutMainLoop(); 67}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/01 23:28