opengl编程
‘壹’ C语言windows,OpenGL编程
查找 MSDN 可以得知,MSG 里面的 pt 坐标是相对于窗口的左上角的;
2. 至于声音控制和播放,可以使用 Windows 自带的 MCI API,或者使用 DirectSound 来播放,我推荐你使用 un4seen 的 BASS,简单实用强大,一两个函数就可以播放音效了;
3. 你要使用 alpha blend 与桌面进行镂空运算,就必须首先获得桌面的窗体句柄,OpenGL 的 alppha 运算我不是很懂,不过 Direct3D 的话就简单多了;
4. 屏幕常亮,其实就是阻止系统进入休眠状态,每当系统要进入休眠状态之前,都会向系统的所有窗口发送一条消息,你拦截这条消息,进行特别的处理就可以防止系统进入休眠了,至于是什么消息,请查看 MSDN,我也好久没用过这条消息了;
5.bmp 文件可以保存 alpha 通道,使用 32bit 色深的 bmp 文件就可以了,RGB 分别 8bit,alpha 通道 8bit,不过说到 alpha 通道,tga 或者 png 图片更加合适,因为他们可以进行无损压缩;
6.用GetPocAddress导出函数,只能用类型强制转换,这个是 windows 的原则,我们只能去迎合它了 ...
7. 执行 NULL 指针的话,不同的系统会有不同的反应,XP 是直接程序崩溃,Vista 或者以上的系统,就会提示无响应
8. 如果你建立的工程是 Win32 窗口程序,那么就不会有 DOS 窗口,如果你建立的是 Win32 控制台程序,那么就会有 DOS 窗口;如果你使用 OpenGL 实用库来创建 OpenGL 程序,那个 DOS 窗口是无法消除的,它可以帮助你进行错误排查
9. 不要用 Dev C++ 了,用 VS2010 吧,这是行业规范
最后,祝楼主学习愉快
‘贰’ OPENGL编程问题
//旋转直线
#include <gl/glut.h>
GLfloat spin = 0.0;
GLdouble pt[3][3]={0};
int st=0;
void init()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glColor3f(1.0, 1.0, 1.0);
glPointSize(5);
switch(st){
case 3:
glTranslated(pt[2][0],pt[2][1],pt[2][2]);
glRotatef(spin,0,0,1);
glTranslated(-pt[2][0],-pt[2][1],-pt[2][2]);
//点3
glBegin(GL_POINTS);
glVertex3dv(pt[2]);
glEnd();
case 2:
//线
glBegin(GL_LINES);
glVertex3dv(pt[0]);
glVertex3dv(pt[1]);
glEnd();
//点2
glBegin(GL_POINTS);
glVertex3dv(pt[1]);
glEnd();
case 1:
//点1
glBegin(GL_POINTS);
glVertex3dv(pt[0]);
glEnd();
break;
}
glPopMatrix();
glutSwapBuffers();
}
void spinDisplay(void)
{
spin = spin + 1.0;
if (spin > 360.0)
spin -= 360.0;
glutPostRedisplay();
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void toWorldCoords(int x, int y, GLdouble w[3])
{
GLint viewport[4];
GLdouble mv[16],proj[16];
GLint realy;
glGetIntegerv(GL_VIEWPORT, viewport);
glGetDoublev(GL_MODELVIEW_MATRIX, mv);
glGetDoublev(GL_PROJECTION_MATRIX, proj);
realy = viewport[3] - (GLint) y - 1;
gluUnProject(x,realy,0,mv,proj,viewport, w,w+1,w+2);
}
void mouse(int button, int state, int x, int y)
{
switch (button) {
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN)
{
switch(st)
{
case 2:
glutIdleFunc(spinDisplay);
case 1:
case 0:
toWorldCoords(x,y,pt[st++]);
glutPostRedisplay();
break;
}
}
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutMainLoop();
return 0;
}
‘叁’ OpenGL编程问题
#include<iostream>下面加一行using namespace std;
前缀 数据类型 相应C语言类型 OpenGL类型
b 8-bit integer signed char GLbyte
s 16-bit integer short GLshort
i 32-bit integer long GLint,GLsizei
f 32-bit floating-point float GLfloat,GLclampf
d 64-bit floating-point double GLdouble,GLclampd
ub 8-bit unsigned integer unsigned char GLubyte,GLboolean
us 16-bit unsigned integer unsigned short GLushort
ui 32-bit unsigned integer unsigned long GLuint,GLenum,GLbitfield
‘肆’ opengl编程指南适合初学者吗
其实我觉得NeHe的OpenGL指南应该是比较容易理解和入门的~
如果例程运行有问题,最好找一下问题根源所在~
我记得我当初学openGL的时候(做虚拟现实相关的破烂玩意儿~),只有一点点的WINDOWS编程基础(自学的《windows程序设计》这本书),用的也是nehe的教程,感觉用来入门还算不错的~
不过后来的工作,再也没有用过openGL。。。都淡忘了 =。=
‘伍’ OpenGL编程
1.将开发库中的.h文件拷贝到Visual C++2008的\Include\GL目录中
2.将.lib文件拷贝到Visual C++2008的\lib目录中
3.将.dll文件拷贝到操作系统的system32目录中
先看一下里面有没有对应的 glaux.h glaux.lib 没有的话网上下一个,或者给我邮箱我发给你也行
‘陆’ 如何在windows上用C/C++进行OpenGL编程
windows可以opengl编程。上网站下载glut压缩包后,解压,把glut32.dll放在Windows的system32目录下,将glut32.lib放在C:\program files\Microsoft Visual Studio\VC98\Lib目录中,将glut.h放在C:\programfiles\Microsoft Visual Studio\VC98\Include\GL目录中。
VC工程项目的设置
为了使用OpenGL,我们需要在项目中加入相关的Lib文件:glut32.lib。方法如下:选中菜单
Project->Settings项,在link选项卡中的Object/Library moles栏中加入glut32.lib。
选择菜单File中的New选项,弹出一个分页的对话框,选中页Files中的C++ sourcefile,填入
文件名,钩选添加到刚才建的那个工程里,然后就可以开始编程了。
新建一个项目的方法如下:选择菜单File中的New选项,弹出一个分页的对话框,选中页
Projects中的Win32 Console Application项,然后填入你自己的Project name,回车即可。VC为
你创建一个工作区(WorkSpace),你的项目就放在这个工作区里。 然后,为项目添加文件即可。
‘柒’ opengl编程高手请进!
OpenGL1.5用户指南英文版
下载地址
http://www.caenet.cn/data/Data.aspx?ID=344
‘捌’ 求<<opengl编程指南>>中文的pdf
很清晰,中文版本。可以先看看再采纳。 望采纳 本来是直接给你附件的。现在网络好像不能添加附件了。给我网址吧
‘玖’ 为什么《OpenGL编程指南》(原书第8版)中第一个OpenGL程序triangles.cpp我原封不动的敲上去还报错
你看的这种书,附带了很多自己的源代码库.你的程序要链接上这种库才能用啊.
看来你还没怎么用过vc, 这种链接lib 什么的是基本功.
要先熟悉后才能再研究更深的东西.
你身边有高手的话让他给你演示一下.
‘拾’ OpenGL编程使矩形旋转
已知对角线的两点的坐标,那么就知道四个点的坐标了呀,(25,25) (25,75) (75,75) (75,25),你可以这么写代码
glPushMatrix();
glRotatef……//旋转矩阵
glScalef……//缩放矩阵
glBegin……
glVertex2f();
glVertex2f();
glVertex2f();
glVertex2f();
glEnd();
1、glScale —— 将新的缩放矩阵乘以当前矩阵
有三个参数,为缩放因子
2、glRotate------旋转矩阵
有四个参数,第一个是角度,其他的分别代表x,y,z轴,表示绕着哪个轴进行旋转