opengl学习笔记(二)
这段时间终于接触到一点点shader了,应该说shader是非常有用的东西吧,它就是能够把一些固定渲染管线的东西改变了,按照自己的意愿进行渲染,这样的话图形就可以自由发挥了。
我也只是试验了一下shader,然后有一些经验:
一、windows上面的gl版本只有1.1,永远只有1.1,微软太万恶了。。
1.1没有GLSL,不能写shader,,,,,,
所以要用一个开源的库,叫glew,用它才能在windows上写shader。。
蛋疼的微软。。。
二、glew使用之前要初始化,glewinit。
而且要在创建窗口之后初始化,
初始化之后才能用,才能写shader
下面是我试验了一下shader能不能用,只是试验这个东西好不好使,可以跑起来的:
#include <windows.h>
#include <GL/glew.h>
#include <GL/glut.h>
#include <iostream>
#include <string>
#include <cstdio>
using namespace std ; void init() ;
void display() ;
void reshape( int , int ) ;
void makeShader() ; int main( int argc , char ** argv )
{
//glewInit() ;
glutInit( &argc , argv ) ;
glutInitWindowSize( 500 , 500 ) ;
glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE ) ;
glutCreateWindow( "cube" ) ;
glewInit() ;
makeShader() ;
init() ;
glutDisplayFunc( display ) ;
glutReshapeFunc( reshape ) ;
glutMainLoop() ;
return 0 ;
} void makeShader()
{
int shader , program , compiled , linked ; const GLchar* shaderSrc[] = {
"void main()"
"{"
" gl_Position = gl_ModelViewProjectionMatrix *gl_Vertex ; "
"}"
} ;
shader = glCreateShader( GL_VERTEX_SHADER ) ;
glShaderSource( shader , 1 , shaderSrc , NULL ) ;
glCompileShader( shader ) ; glGetShaderiv( shader , GL_COMPILE_STATUS , &compiled) ; if( !compiled )
{
GLint Length ;
GLchar *log ;
glGetShaderiv( shader , GL_INFO_LOG_LENGTH , &Length ) ;
log = (GLchar*)malloc( Length ) ;
glGetShaderInfoLog( shader , Length , &Length , log ) ;
fprintf( stderr , "compile log = '%s '\n" , log ) ;
free( log ) ;
} program = glCreateProgram() ; glAttachShader( program , shader ) ;
glLinkProgram( program ) ; glGetProgramiv( program , GL_LINK_STATUS , &linked ) ;
if( linked )
{
glUseProgram( program ) ;
}
else
{
cout << "error" << endl ;
} } void init()
{
//makeShader() ;
glClearColor( 0 , 0 , 0 , 0 ) ;
glClear( GL_COLOR_BUFFER_BIT ) ;
} void reshape( int w , int h )
{
glViewport( 0 , 0 , w , h ) ;
glMatrixMode( GL_PROJECTION ) ;
glLoadIdentity() ;
glFrustum( -1 , 1 , -1 , 1 , 1 , 5 ) ;
glMatrixMode( GL_MODELVIEW ) ;
glLoadIdentity() ;
} void display()
{
glColor3f( 1 , 1 , 0 ) ;
gluLookAt( 0 , 0 , 5 ,
0 , 0 , 0 ,
0 , 1 , 0
) ;
glTranslatef( 1 , 0 , 0 ) ;
glRotatef( 30 , 0 , 0 , 1 ) ;
glutWireCube( 1 ) ;
glRotatef( -30 , 0 , 0 , 1 ) ;
glTranslatef( 1 , 0 , 0 ) ;
glBegin( GL_TRIANGLES ) ;
glVertex3f( 0 , 0 , 0 ) ;
glVertex3f( 0 , 0.5 , 0 ) ;
glVertex3f( 0.5 , 0.5 , 0 ) ;
glEnd() ;
glFlush() ;
}
opengl学习笔记(二)的更多相关文章
- OpenGL学习笔记3——缓冲区对象
在GL中特别提出了缓冲区对象这一概念,是针对提高绘图效率的一个手段.由于GL的架构是基于客户——服务器模型建立的,因此默认所有的绘图数据均是存储在本地客户端,通过GL内核渲染处理以后再将数据发往GPU ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- OpenGL学习笔记:拾取与选择
转自:OpenGL学习笔记:拾取与选择 在开发OpenGL程序时,一个重要的问题就是互动,假设一个场景里面有很多元素,当用鼠标点击不同元素时,期待作出不同的反应,那么在OpenGL里面,是怎么知道我当 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- JMX学习笔记(二)-Notification
Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...
- java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- 《SQL必知必会》学习笔记二)
<SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
随机推荐
- 高级UNIX环境编程13 守护进程
linux下,keventd守护进程为内核中运行的执行的函数提供进程上下文 bdflush,kupdated将高速缓存中的数据冲洗到磁盘上
- pythonxy 安装
安装Numpy,发现错误: No module named msvccompiler in numpy.distutils; trying from distutils 目前python除了在 Win ...
- Poj 2255 Tree Recovery(二叉搜索树)
题目链接:http://poj.org/problem?id=2255 思路分析:根据先序遍历(如DBACEGF)可以找出根结点(D),其后为左右子树:根据中序遍历(如ABCDEFG),已知根结点(D ...
- ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3
ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3
- 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档
对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...
- linux进程解析--进程切换
为了控制进程的执行,linux内核必须有能力挂起正在cpu上运行的进程,换入想要切换的进程,也就是恢复以前某个挂起的进程,这就是linux的进程切换. 1进程切换的时机 一般来说,进程切换都是发生在 ...
- ios常见加密解密方法
在其他平台中经常会计算MD5值,在iOS平台中也提供了该方法,首先需要导入头文件 #import <CommonCrypto/CommonDigest.h> 方法CC_MD5可以获取MD5 ...
- 配置SecureCRT连接Linux CentOS
链接地址:http://f.dataguru.cn/thread-144513-1-1.html 环境:Linux:centos5.8虚拟机:VirtualBox本机:windows至于怎么安装Cen ...
- VMware-WorkStation 去掉VM工具栏
链接地址:http://jingyan.baidu.com/article/8275fc86b95c6246a03cf629.html VMware 是目前用得最多的虚拟机.当开启虚拟机的全屏模式时, ...
- ASP.NET MVC 5 学习教程:通过控制器访问模型的数据
原文 ASP.NET MVC 5 学习教程:通过控制器访问模型的数据 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连 ...