opengl小程序
A. 如何讓一個程序以OPENGL方式運行
http://wenku..com/view/676808791711cc7931b7167b.html
看這里
B. 求一個opengl游戲程序 小功能
你可以學一下GLUT:
http://blog.csdn.net/xie_zi/article/details/1911406
GLUT是個建立在OpenGL基礎上的應用程序框架,它幫你把一些繁瑣的(和平台相關的)操作簡化了很多,比如建立窗口,監聽鍵盤滑鼠輸入之類的,用起來十分方便,用來寫小游戲也足夠了,非常適合你的要求。
C. opengl繪制一個球體的程序
語法也有錯誤:glVertex3fv(&vdata [&tindices[i][0][0]]);
glVertex3fv(&vdata [tindices[i][1][0]]);
glVertex3fv(&vdata [tindices[i][2][0]]);
改為:
glVertex3fv(vdata [tindices[i][0]]);
glVertex3fv(vdata [tindices[i][1]]);
glVertex3fv(vdata [tindices[i][2]]);
我的運行環境是在QT IDE上運行的。4.7.0版。
如果你是在VC上運行應該也要加入opengl32,glut,glut32庫(32位WIN上的),
另外,這個程序你是看不到一個球體的,因為你沒有使用光照,只能看到一個輪廓。
我的Qt上我加入的庫是:opengl32,glut,glee5(glee5是glee是自己編譯的替換glut32庫)
頭加入了:windown.h,gl/glee.h(glee.h就是glee的頭文件在網上可以下載,比gl.h要高級,因為WIN上的gl.h只支持到opengl32的1.1版)
源文件:
#include <windows.h>///////////////////////////////
#include <GL/glee.h>
////////////////////////////////
#include <GLglut.h>
#include <math.h>
#define x .52573
#define z .85965
void mydisplay(void)
{
static GLfloat vdata[12][3]={{-x,0.0,z},
{x,0.0,z},
{-x,0.0,-z},
{x,0.0,-z},
{0.0,z,x},
{0.0,z,-x},
{0.0,-z,x},
{0.0,-z,-x},
{z,x,0.0},
{-z,x,0.0},
{z,-x,0.0},
{-z,-x,0.0}};
static GLuint tindices[20][3]={{1,4,0},
{4,9,0},
{4,5,9},
{8,5,4},
{1,8,4},
{1,10,8},
{10,3,8},
{8,3,5},
{3,2,5},
{3,7,2},
{3,10,7},
{10,6,7},
{6,11,7},
{6,0,11},
{6,1,0},
{10,1,6},
{11,0,9},
{2,11,9},
{5,2,9},
{11,2,7}};
int i;
glBegin(GL_TRIANGLES);
for(i=0;i<20;i++)
{
glVertex3fv(vdata [tindices[i][0]]);//////////////////////////////////////////////
glVertex3fv(vdata [tindices[i][1]]);/////////////////////////////////////////////
glVertex3fv(vdata [tindices[i][2]]);////////////////////////////////////////////
}
glEnd();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一個OpenGL程序");
glutDisplayFunc(&mydisplay);
glutMainLoop();
return 0;
}
後面加了///////////////////////////////////是我修改了的。
我用的連接庫是:
LIBS=-lopengl32 -lfreeglut -lglee5
D. 麻煩大家幫我看看,一個簡單的opengl程序
你的圖形已經畫出來了,但是reshape()函數寫的可能有問題,所以看不到,可以在畫圖函數里畫一個簡單的紅色矩形試試就知道了。
關於reshape()可以參考超級寶典里的寫法(直接復制可能要注意下格式):
完整代碼(不含include):
GLUquadricObj *quadObj1;
void reshape(int w, int h)
{
GLfloat aspectRatio;
if(h == 0)h = 1;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
aspectRatio = (GLfloat)w / (GLfloat)h;
if (w <= h)
glOrtho (-100.0, 100.0, -100 / aspectRatio, 100.0 / aspectRatio, 1.0, -1.0);
else
glOrtho (-100.0 * aspectRatio, 100.0 * aspectRatio, -100.0, 100.0, 1.0, -1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void drawAnnulus()
{
quadObj1 = gluNewQuadric();
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
gluQuadricDrawStyle(quadObj1,GLU_POINT);
glTranslatef(10.0,10.0,0.0);
glColor3f(1.0,1.0,1.0);
gluPartialDisk(quadObj1,15.0,25.0,15.0,10.0,10.0,100.0);
glPopMatrix();
gluDeleteQuadric(quadObj1);
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB );
glutInitWindowPosition(0,0);
glutInitWindowSize(500,500);
glutCreateWindow("五環");
glutReshapeFunc(reshape);
glutDisplayFunc(drawAnnulus);
glutMainLoop();
return 0;
}
關於補充問題:
不知道你是否已經試過改為我提供的代碼。總之我改後能看到你說的圓盤。不用截圖給你看吧。你的圓盤只有一小段,因為你的角度只有10-100...把整個代碼貼給你吧。
E. 急求opengl程序代碼
#include<windows.h>
#include<stdlib.h>
#include<stdio.h>
#include<GL/glut.h>
#include<math.h>
void drawline(float x1,float y1,float x2,float y2) //The function to draw a line from point(x1,y1) to point (x2,y2)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (0.0, 0.0, 0.0);
glBegin(GL_LINES);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
}
void _display(void)
{
#define pi 3.1415926
GLfloat theta,r=18;
GLint n=16;
theta=2*pi/n;
GLfloat vertex_list[16][2];
for(int i=0;i<n;i++) //Find the vertex
{
vertex_list[i][0]=25+r*cos(i*theta);
vertex_list[i][1]=25+r*sin(i*theta);
}
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (0.0, 0.0, 0.0);
glBegin(GL_LINE_LOOP);
for(int j=0;j<n;j++)
{
for(int k=j;k<n;k++)
{
drawline(vertex_list[j][0],vertex_list[j][1],vertex_list[k][0],vertex_list[k][1]);
}
}
glEnd();
glFlush ();
}
void _init (void)
{
glClearColor (1.0, 1.0, 1.0, 0.0);
glColor3f(1.0, 0.0, 0.0) ;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 50.0, 0.0, 50.0);
glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 0);
glutCreateWindow ("hello");
_init ();
glutDisplayFunc(_display);
glutMainLoop();
return 0;
}
一個正十六邊形 各點相連的圖形
我自己寫的 你看看行不行
F. opengl程序發布
我前幾天遇到過和你同樣的問題,後來自己解決了。
解決方法:
直接將glut.h、glut.lib、glut32.lib、glut.dll、glut.32.dll這5個文件復制到你的homework文件夾中,然後,把代碼中的
#include
<gl/glut.h>
改成
#include
"glut.h"
就可以了。
以上5個glut文件打包下載地址:http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
我的程序頭部如下:
//裝載OpenGL的lib庫文件
#pragma
comment(lib,"opengl32.lib")
#pragma
comment(lib,"glu32.lib")
#pragma
comment(lib,"glaux.lib")
//裝載OpenGL頭文件
#include
<gl/gl.h>
//標准OpenGL頭文件
#include
<gl/glu.h>
//OpenGL實用工具庫
#include
<gl/glaux.h>
//OpenGL輔助函數庫
//#include
<gl/glut.h>
#include
"glut.h"
//修改後的
......
......
G. OpenGL程序的小問題
一個很小很小的錯誤。
在繪制文本的時候,改變了xRaster的值:// xRaster += 50;
所以下次重繪的時候,*號的位置就變了。
解決辦法也很簡單,在繪制*號之前,重新把xRaster修改為25就行了。
glColor3f(1.0,0.0,0.0); //設置標記顏色為紅色
xRaster = 25;
for(k = 0;k < 12;k++){ //將數據畫為星號多點標記
glRasterPos2i (xRaster + k*50,dataValue [k] - 4); //設置當前光柵位置
glutBitmapCharacter(GLUT_BITMAP_9_BY_15,'*');
另外想問下樓主你學OpenGL是做什麼?之前在學校里因為導師的項目需要,用了一年的OpenGL,現在基本上荒廢掉了。
H. 用OpenGL編的小程序
實現三維金字塔的繪制#include <windows.h>#include <GL/glut.h>GLfloat rtri=60.0; // 設置三角形的旋轉角度void myDisplay(void){ glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); // 重置模型觀察矩陣 glScalef (0.25, 0.25, 0.25); // 設置金字塔的縮放大小 glRotatef(rtri,-0.25f,1.0f,0.0f); // 金字塔繞Y軸旋轉1.0倍rtri,繞X軸旋//轉-0.25倍rtri glBegin(GL_TRIANGLES); // 開始繪制金字塔的各個面 glColor3f(1.0f,0.0f,0.0f); // 紅色 glVertex3f( 0.0f, 1.0f, 0.0f); // 三角形的上頂點(前側面) glColor3f(0.0f,1.0f,0.0f); // 綠色 glVertex3f(-1.0f,-1.0f, 1.0f); // 三角形的左下頂點(前側面) glColor3f(0.0f,0.0f,1.0f); // 藍色 glVertex3f( 1.0f,-1.0f, 1.0f); // 三角形的右下頂點(前側面) glColor3f(1.0f,0.0f,0.0f); // 紅色 glVertex3f( 0.0f, 1.0f, 0.0f); // 三角形的上頂點(右側面) glColor3f(0.0f,0.0f,1.0f); // 藍色 glVertex3f( 1.0f,-1.0f, 1.0f); // 三角形的左下頂點(右側面) glColor3f(0.0f,1.0f,0.0f); // 綠色 glVertex3f( 1.0f,-1.0f, -1.0f); // 三角形的右下頂點(右側面) glColor3f(1.0f,0.0f,0.0f); // 紅色 glVertex3f( 0.0f, 1.0f, 0.0f); // 三角形的上頂點(後側面) glColor3f(0.0f,1.0f,0.0f); // 綠色 glVertex3f( 1.0f,-1.0f, -1.0f); // 三角形的左下頂點(後側面) glColor3f(0.0f,0.0f,1.0f); // 藍色 glVertex3f(-1.0f,-1.0f, -1.0f); // 三角形的右下頂點(後側面) glColor3f(1.0f,0.0f,0.0f); // 紅色 glVertex3f( 0.0f, 1.0f, 0.0f); // 三角形的上頂點(左側面) glColor3f(0.0f,0.0f,1.0f); // 藍色 glVertex3f(-1.0f,-1.0f,-1.0f); // 三角形的左下頂點(左側面) glColor3f(0.0f,1.0f,0.0f); // 綠色 glVertex3f(-1.0f,-1.0f, 1.0f); // 三角形的右下頂點(左側面) glEnd(); rtri+=0.2f; // 增加三角形的旋轉變數(新增) glFlush(); }void main(int argc, char *argv[]) // 主函數,與例4.1相同{ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100); glutInitWindowSize(600, 600); glutCreateWindow("第二個OpenGL程序"); glutDisplayFunc(&myDisplay); glutMainLoop();}