• OpenGL 编程指南


    (美)DaveShreiner The Khronos OpenGL ARB Working Group 2011 机械 七版.


    opengl wiki  :http://www.opengl.org/wiki/Main_Page

    3.0 的API http://www.opengl.org/documentation/specs/glut/spec3/node1.html

    \4.2 的API 只能网上看,下载要会员 ,稍有郁闷, 暂不看.

    any question : http://www.opengl.org/

    Robin : http://www.xmission.com/~nate/tutors.html

    red-book official site : http://www.opengl-redbook.com/

    红宝书的附带程序:http://freeglut.sourceforge.net/

    偶然发现个高级图形学,密歇根大学计院的 http://www.cse.msu.edu/~cse872/

    其它有助于学习的资源在 http://www.opengl.org/resources/

    http://3dgep.com/?cat=11

    第五章 光照

    环境光 影响整体颜色, 直接照射,散射颜色占主导, 因此只有当物体没有被直接照射时,环境颜色才主重要地位.和散射光一样,环境颜色不受观察点影响.

    对于现实世界,环境光和散射光通常设置 为一样.

    镜面反射产生亮点,并取决于观察点位置 ,

    发射光颜色 ,


    第六章 混合/抗锯齿和多边形偏移

    OPENGL安装glew库的一个小问题.

    http://blog.csdn.net/xiajun07061225/article/details/6938740

    #error :  gl.h included before glew.h 

    glew.h 要在 glut.h之前引入.


    一个诡异的问题:

    在调试"颜色索引模式下的抗锯齿"时程序调试不出来:

    glut : fatal error in c :pixel format with necessary capabilities not found

    不知是因为显卡不支持.

    哭泣的脸又一个奇怪的问题:

     
    main(int argc, char** argv)
    {
            glutInit(&argc,argv);    //显示模式初始化      
            glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);    //定义窗口大小      
            //glutInitWindowSize(0,0);    //定义窗口位置       
            //glutInitWindowPosition(100,100);    //创建窗口     
            glutCreateWindow("OpenGL Version");     
            const GLubyte* name = glGetString(GL_VENDOR); //返回负责当前OpenGL实现厂商的名字   
            const GLubyte* biaoshifu = glGetString(GL_RENDERER); //返回一个渲染器标识符,通常是个硬件平台   
            const GLubyte* OpenGLVersion =glGetString(GL_VERSION); //返回当前OpenGL实现的版本号   
            const GLubyte* gluVersion= gluGetString(GLU_VERSION); //返回当前GLU工具库版本    
            //const GLubyte* acceptStereo = glGetBooleanv(GL_STEREO , );
            printf("OpenGL实现厂商的名字:%s\n", name);    
            printf("渲染器标识符:%s\n", biaoshifu);   
            printf("OOpenGL实现的版本号:%s\n",OpenGLVersion );    
            printf("OGLU工具库版本:%s\n", gluVersion);
            system("pause");
        return 0;
    }

    这段代码竟然无视我定义的窗口, 怎么才让它用上呢/


    第九章 纹理

    记住:纹理坐标必须在RGBA模式下使用.

    GL_RGB 和 GL_RGBA 是有差别的.

    teaport : QQ截图20130316194822


    第十章 帧缓冲区 (沉睡的弯月明天一定要看完这本!

     

       1:   
       2:  
       3:  // opengl10.1.cpp : 
       4:  //使用模板缓冲区
       5:   
       6:  #include "stdafx.h"
       7:  #include <GL/glut.h>
       8:   
       9:  #define YELLOWMAT 1
      10:  #define BLUEMAT 2
      11:   
      12:  void init()
      13:  {  
      14:      GLfloat yellow_diffuse [] = {0.7,0.7,0.0,1.0};
      15:      GLfloat yellow_specular[] = {1.0,1.0,1.0,1.0};
      16:   
      17:      GLfloat blue_diffuse[] = {0.1,0.1,0.7,1.0};
      18:      GLfloat blue_specular[] = {0.1,1.0,1.0,1.0};
      19:   
      20:      GLfloat position_one[] = {1.0,1.0,1.0,0.0};
      21:      
      22:      glNewList(YELLOWMAT,GL_COMPILE);//显式列表
      23:          glMaterialfv(GL_FRONT,GL_DIFFUSE,yellow_diffuse);//材料属性,向量版本
      24:          glMaterialfv(GL_FRONT,GL_SPECULAR,yellow_specular);
      25:          glMaterialf(GL_FRONT,GL_SHININESS,64.0);//非向量版本的只用于设置 GL_SHININESS
      26:      glEndList();
      27:   
      28:      glNewList(BLUEMAT,GL_COMPILE);
      29:          glMaterialfv(GL_FRONT,GL_DIFFUSE,blue_diffuse);
      30:          glMaterialfv(GL_FRONT,GL_SPECULAR,blue_specular);
      31:          glMaterialf(GL_FRONT,GL_SHININESS,45.0);
      32:      glEndList();
      33:      
      34:      glLightfv(GL_LIGHT0,GL_POSITION,position_one);//创建光源,浮点向量,指定坐标位置
      35:   
      36:      glEnable(GL_LIGHT0);
      37:      glEnable(GL_LIGHTING);
      38:      glEnable(GL_DEPTH_TEST);
      39:   
      40:       glClearStencil(0x0);//清除 模板 缓冲区
      41:      glEnable(GL_STENCIL_TEST);
      42:       
      43:  }
      44:  /*画一个球在两环之间的钻石形中间的窗中.
      45:  */
      46:  void display()
      47:  {
      48:      glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
      49:       glStencilFunc(GL_EQUAL,0x1,0x1);//模板测试函数
      50:       glStencilOp(GL_KEEP,GL_KEEP,GL_KEEP);//模板测试操作
      51:       glCallList(BLUEMAT);
      52:       glutSolidSphere(0.5,15,15);//半径,经线,纬线 ? 
      53:       glStencilFunc(GL_NOTEQUAL,0x1,0x1);
      54:      
      55:      glPushMatrix();
      56:          glRotatef(45.0,0.0,0.0,1.0);//模型变换,当前矩阵与一个移动坐标矩阵相乘,以逆时针从原点到(x,y,z)的直线旋转.这里相当 于绕z旋转45度.
      57:          glRotatef(45.0,0.0,1.0,0.0);//再绕y转45
      58:           glCallList(YELLOWMAT);
      59:          glutSolidTorus(0.275,0.85,15,15);//内径,外径,密度边数,圆似度.
      60:          glPushMatrix();
      61:              glRotatef(90.0,1.0,0.0,0.0);
      62:              glutSolidTorus(0.275,0.85,15,15);
      63:          glPopMatrix();
      64:      glPopMatrix();
      65:       glFlush();//花了我半小时 .
      66:  }
      67:   
      68:  /*不管窗口是否重绘,重新确定坐标系统,重绘模板区
      69:  */
      70:   
      71:  void reshape(int w, int h )//GLUT传递的 绘区 窗口宽高 像素数.
      72:  {
      73:      glViewport(0,0,(GLsizei)w,(GLsizei)h);
      74:      //画个钻石形的模板区
      75:      glMatrixMode(GL_PROJECTION);
      76:      glLoadIdentity();
      77:      if(w<=h)//二维图像投影到二维屏幕,如果窗宽 比 高 小,右上角需要按高宽比调整
      78:          gluOrtho2D(-3.0,3.0,-3.0*(GLfloat)h/(GLfloat)w,3.0*(GLfloat)h/(GLfloat)w);
      79:      else //如果宽 比高 大, 需要把左下 角 按比例调整.
      80:          gluOrtho2D(-3.0*(GLfloat)w/(GLfloat)h,3.0*(GLfloat)w/(GLfloat)h,-3.0,3.0);
      81:      glMatrixMode(GL_MODELVIEW);
      82:      glLoadIdentity();
      83:       
      84:      glClear(GL_STENCIL_BUFFER_BIT);//清除指定的缓冲区
      85:      glStencilFunc(GL_ALWAYS,0x1,0x1);//比较函数,参考值,掩码(比较只在掩码为1的位上进行)
      86:      glStencilOp(GL_REPLACE,GL_REPLACE,GL_REPLACE);
      87:   
      88:     
      89:      glBegin(GL_QUADS);//菱形
      90:          glVertex2f(-1.0,0.0);
      91:          glVertex2f(0.0,1.0);
      92:          glVertex2f(1.0,0.0);
      93:          glVertex2f(0.0,-1.0);
      94:      glEnd();
      95:      
      96:      glMatrixMode(GL_PROJECTION);
      97:      glLoadIdentity();
      98:      gluPerspective(45.0,(GLfloat)w/(GLfloat)h,3.0,7.0);
      99:      glMatrixMode(GL_MODELVIEW);
     100:      glLoadIdentity();
     101:      glTranslatef(0.0,0.0,-5.0);
     102:      
     103:   
     104:      
     105:  } 
     106:   
     107:  int _tmain(int argc, char** argv)
     108:  {
     109:      glutInit(&argc,argv);
     110:       glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH|GLUT_STENCIL);
     111:       
     112:      glutInitWindowSize(400,400);
     113:      glutInitWindowPosition(110,110);
     114:      glutCreateWindow("Ms. white");
     115:      init();
     116:      glutReshapeFunc(reshape);
     117:      glutDisplayFunc(display);
     118:      glutMainLoop(); 
     119:      return 0;
     120:  }

    我了个擦~!(陈其峰语)我记得个GLUT出现白屏的原因,有没人是忘记强制刷新的!!!

    那么. 相反的情况(不强制)是如何刷新的呢?

    \

    .景深的效果,很有感觉~~~~~~~

    QQ截图20130317160807 

    \做事要有头脑,瞎忙碌没有用.学习亦当如此.\

    \OPENCV 人脸识别,下周做这个, http://blog.csdn.net/feiwei/article/details/4261888

    \问题;  glGenFramebuffers 无定义 , 即引用了glew包, glew32.lib. 网上查了下要加 EXT后缀, 这个什么东东?然后呢,,,

    还是不行,0x00000000 处有未经处理的异常: 0xC0000005: Access violation

    闪电不但没成,还变成犯罪了.继续纠结中...

    这个老兄博客写得不错(但与此无关)http://blog.csdn.net/dizuo/article/details/8364003

    \glBlendFunc

    http://msdn.microsoft.com/en-us/library/ms537046


    十一章 分格化和二次方程表面

    \ 不能将参数 3 从“void (__stdcall *)(const GLdouble *)”转换为“void (__stdcall *)(void)”

    其实主要原因是在进行强制类型转换的时候,在C++和C语言中是有区别的,所以c++就报错的。(void (__stdcall *)())

    解决方法如下:http://hi.baidu.com/zhujianzhai/item/6ed52336d67e7b9ab80c03eb

    gluTessCallback(tobj, GLU_TESS_VERTEX, (void (__stdcall *)())glVertex3dv);
    gluTessCallback(tobj, GLU_TESS_BEGIN, (void (__stdcall *)())beginCallback);
    gluTessCallback(tobj, GLU_TESS_END, (void (__stdcall *)())endCallback);
    gluTessCallback(tobj, GLU_TESS_ERROR, (void (__stdcall *)())errorCallback);


    十二章 求值器和NURBS

    \今天看不完 吐舌笑脸 吐舌笑脸 吐舌笑脸 吐舌笑脸 吐舌笑脸 吐舌笑脸 吐舌笑脸 只能这样了,明天要准备开题的事儿~~~~~~~GL 我们来日方长吧,吐舌鬼脸


    十三章 选择和反馈

    十四章 高级技巧

    十五章 着色语言

  • 相关阅读:
    2018/03/27 每日一个Linux命令 之 cron
    2018/03/26 每日一个Linux命令 之 du
    《Nginx
    学习计划 mysql explain执行计划任务详解
    方法覆盖
    二维数组中的查找
    oracle导入少量数据(少于10M)
    hive计算日期差
    查看文件编码格式以及更改编码
    java io流
  • 原文地址:https://www.cnblogs.com/iamgoodman/p/2961959.html
Copyright © 2020-2023  润新知