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();}