OpenGL编程指南8:模型组合变换
生活随笔
收集整理的這篇文章主要介紹了
OpenGL编程指南8:模型组合变换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.代碼
#include <vgl.h>void init(void) {glClearColor(0.0,0.0,0.0,0.0);glShadeModel(GL_FLAT); }void draw_triangle(void) { glBegin(GL_LINE_LOOP);glVertex2f(0.0, 25.0);glVertex2f(25.0, -25.0);glVertex2f(-25.0, -25.0);glEnd(); }void display(void) {glClear (GL_COLOR_BUFFER_BIT);glColor3f (1.0, 1.0, 1.0);glLoadIdentity ();glColor3f (1.0, 1.0, 1.0);draw_triangle ();glEnable (GL_LINE_STIPPLE);glLineStipple (1, 0xF0F0);glLoadIdentity ();glTranslatef (-20.0, 0.0, 0.0);draw_triangle ();glLineStipple (1, 0xF00F);glLoadIdentity ();glScalef (0.8, 0.8, 1.0);draw_triangle ();glLineStipple (1, 0x8888);glLoadIdentity ();glRotatef (30.0, 0.0, 0.0, 1.0);draw_triangle ();glDisable (GL_LINE_STIPPLE);glFlush (); }void reshape(int w, int h) {glViewport (0, 0, (GLsizei) w, (GLsizei) h);glMatrixMode (GL_PROJECTION);glLoadIdentity ();if (w <= h)glOrtho (-50.0, 50.0, -50.0*(GLfloat)h/(GLfloat)w,50.0*(GLfloat)h/(GLfloat)w, -1.0, 1.0);elseglOrtho (-50.0*(GLfloat)w/(GLfloat)h,50.0*(GLfloat)w/(GLfloat)h, -50.0, 50.0, -1.0, 1.0);glMatrixMode(GL_MODELVIEW); }int main (int argc, char** argv) {glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(500,500);glutInitWindowPosition(150,150);glutCreateWindow(argv[0]);init();glutDisplayFunc(display); glutReshapeFunc(reshape);glutMainLoop();return 0; }輸出結果:
2.注意事項
使用glLoadIdentity()函數的目的是隔離各個模型變換的效果。對矩陣值初始化能夠防止連續變換產生的累積效果。
盡管反復使用glLoadIndentity()能夠是想預想的結果,但是它的效率可能較低,因為必須重新指定視圖或模型變換。后面會有更好的方法。
總結
以上是生活随笔為你收集整理的OpenGL编程指南8:模型组合变换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenGL编程指南7:视图-
- 下一篇: OpenGL编程指南10:组合运动示例1