#include <gl/glut.h> #include <gl/GLU.h>
#include <gl/GL.h>
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glut32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "glut.lib")
#include <math.h>
void Cube()
{
glBegin(GL_QUAD_STRIP);//填充凸多邊形
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 0.0f, -1.0f);
glVertex3f(1.0f, 1.0f, -1.0f);
glVertex3f(0.0f, 0.0f, -1.0f);
glVertex3f(0.0f, 1.0f, -1.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glEnd();
glBegin(GL_QUAD_STRIP);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 0.0f, -1.0f);
glVertex3f(1.0f, 0.0f, -1.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(0.0f, 1.0f, -1.0f);
glVertex3f(1.0f, 1.0f, -1.0f);
glEnd();
}
void Circle()
{
glBegin(GL_TRIANGLE_FAN);//扇形連續填充三角形串
glVertex3f(0.0f, 0.0f, 0.0f);
int i = 0;
for (i = 0; i <= 390; i += 15)
{
float p = i * 3.14 / 180;
glVertex3f(sin(p), cos(p), 0.0f);
}
glEnd();
}
void Cylinder()
{
glBegin(GL_QUAD_STRIP);//連續填充四邊形串
int i = 0;
for (i = 0; i <= 390; i += 15)
{
float p = i * 3.14 / 180;
glVertex3f(sin(p), cos(p), 1.0f);
glVertex3f(sin(p), cos(p), 0.0f);
}
glEnd();
Circle();
glTranslatef(0, 0, 1);
Circle();
}
void Cone()
{
glBegin(GL_QUAD_STRIP);//連續填充四邊形串
int i = 0;
for (i = 0; i <= 390; i += 15)
{
float p = i * 3.14 / 180;
glVertex3f(0, 0, 1.0f);
glVertex3f(sin(p), cos(p), 0.0f);
}
glEnd();
Circle();
}
void renderScene(void)
{
static float i = 0;
i += 0.1;
if (i > 360)
i = 0;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glPushMatrix();
glColor3f(0, 1, 0);
glTranslatef(-2, 2.0, -12);
glRotatef(i, 1, 1 ,1);
Cylinder();
glPopMatrix();
glPushMatrix();
glColor3f(1, 0, 0);
glTranslatef(2, 2, -12);
glRotatef(i, 1, 1, 1);
Circle();
glPopMatrix();
glPushMatrix();
glColor3f(0, 1, 1);
glTranslatef(-2, -2, -12);
glRotatef(i, 1, 1, 1);
Cube();
glPopMatrix();
glPushMatrix();
glColor3f(1, 1, 0);
glTranslatef(2, -2, -12);
glRotatef(i, 1, 1, 1);
Cone();
glPopMatrix();
glutSwapBuffers();
}
void changeSize(int w, int h) {
// 防止除數即高度為0
// (你可以設定視窗寬度為0).
if (h == 0)
h = 1;
float ratio = 1.0* w / h;
// 單位化投影矩陣。
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// 設定視口大小為整個視窗大小
glViewport(0, 0, w, h);
// 設定正確的投影矩陣
gluPerspective(45, ratio, 1, 1000);
//下面是設定模型視圖矩陣
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, -1.0, 0.0f, 1.0f, 0.0f);//設定觀測點
}
int main(int argc, char * argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(320, 320);
glutCreateWindow("Hello OpenGL");
glutDisplayFunc(renderScene);
glutIdleFunc(renderScene); //指定程式空閑時呼叫函式
glutReshapeFunc(changeSize); //指定視窗形狀變化時的回呼函式
glEnable(GL_DEPTH_TEST);
glutMainLoop();
return 0;
}
uj5u.com熱心網友回復:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main( void )
{
time_t start, finish;
long loop;
double result, elapsed_time;
printf( "Multiplying 2 floating point numbers 10 million times...\n" );
time( &start );
for( loop = 0; loop < 10000000; loop++ )
result = 3.63 * 5.27;
time( &finish );
elapsed_time = difftime( finish, start );
printf( "\nProgram takes %6.0f seconds.\n", elapsed_time );
}
uj5u.com熱心網友回復:
搜網路教程“學OpenGL編3D游戲”。uj5u.com熱心網友回復:
int gStart=0;int gEnd=0;
。。。。。。
gStart=glutGet(GLUT_ELAPSED_TIME);
..........
gEnd=glutGet(GLUT_ELAPSED_TIME);
uj5u.com熱心網友回復:
//
int frame=0,timenow,timebase=0;
void Idle(void)
{
#if 1
frame++;
timenow=glutGet(GLUT_ELAPSED_TIME);
if(timebase==0) timebase=timenow;
if((timenow - timebase) > 1000)
{
double fps = frame*1000.0/(timenow-timebase);
printf("fps =%8.0f\n",fps);
timebase = timenow;
frame = 0;
}
#endif
}
uj5u.com熱心網友回復:
frame 不要 *1000.0uj5u.com熱心網友回復:
樓主還在學固定管線?這個太老了,看看得了。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/64039.html
標籤:圖形處理/算法
上一篇:MFC連接ODBC資料源時出現"記錄集只讀"問題,還有就是提示“SNAPSHOT”僅對記憶體優化的表有效,無法預定義陳述句,怎么辦?
