日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenGL编程指南8:模型组合变换

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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:模型组合变换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。