OpenGL中的ModelMatrix如何在Shader中使用

以下是普通的C# OpneGL代码:

        GL.Viewport(0, 0, glWin.Width, glWin.Height);
        GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

        GL.MatrixMode(MatrixMode.Modelview);
        GL.LoadIdentity();
        GL.Scale(0.5, 0.5, 0.5);
        GL.Rotate(60, 1, 0, 0);
        GL.Translate(1, 0, 0);
        float[] mat = new float[16];
        GL.GetFloat(GetPName.ModelviewMatrix, mat);
        GL.GetFloat(GetPName.ProjectionMatrix, mat);

        GL.Begin(PrimitiveType.Triangles);

        GL.Color3(Color.MidnightBlue);
        GL.Vertex2(-1.0f, 1.0f);
        GL.Color3(Color.SpringGreen);
        GL.Vertex2(0.0f, -1.0f);
        GL.Color3(Color.Ivory);
        GL.Vertex2(1.0f, 1.0f);

        GL.End();

移植到WebGL时,由于只能使用Shader的关系,所以先通过 GetFloat 取得了C#运行时的ModelMatrix值。然后在 js 中直接把该值传入到下面的VertexShader的MVMatrix里面,但是 画出的效果却不相同。

attribute vec3 ModelVertex;  
uniform mat4 MVMatrix;  

void main(void){  
gl_Position = vec4(ModelVertex, 1.0) * MVMatrix;
}  

Shader是不是写错了?

2个回答

       学了接近一个月的OpenGL,终于要排上用场了...好吧,就从学到的shader(着色器)开刀吧。
       先简单的介绍shader,shader其实是显卡的功能,就是利用显卡的GPU去做图像处理的工作,而不是CPU,这样可以在一些复杂的大程序中释放......
答案就在这里:OpenGL中shader使用
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

机器人回答果然不行啊。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
GLSL矩阵变换详解(三、view matrix和projection matrix)
我们在前一篇博客GLSL矩阵变换详解(二、旋转变换、平移变换以及QMatrix4x4)的基础上再增加对摄像机位置、姿态的设置功能,以及成像区域的定义功能。QMatrix4x4::lookAt(camera, center, upDirection)定义了摄像机的位置与姿态,属于view matrix操作的范畴。三个输入变量都是QVector3D类型。camera是摄像机在世界坐标系的坐标。cent...
学习使用Shader处理纹理
使用Shader处理纹理本是件简单的事情,但是我在尝试写一个简单的例子的时候却犯了个错误,导致郁闷了一天,这个稍后再说。 先整理下怎么用Shader处理纹理吧。 1.原理: 用Shader处理纹理的原理其实很简单,将纹理通过一个uniform变量传入shader,然后对着个uniform变量进行操作,就可以直接操作纹理了。 2.参考资料 lighthouse3d上面的教程比
[Modern OpenGL系列(四)]在OpenGL中使用Shader
在上一篇文章中已经介绍了OpenGL窗口的创建。本文接着说如何用OpenGL绘制一个三角形。 1 . 添加头文件shader.h,代码如下:#pragma once#include <string> #include <GL\glew.h>class Shader { public: Shader(const std::string& fileName); void Bind();
学习笔记1--在Qt5中利用OpenGL渲染一个立方体
上文介绍了如何在Qt5中嵌入一个widget来作为OpenGL的渲染窗口,本文将在上文的基础上再嵌入的OpenGL部件中进行简单的渲染,本例打算绘制一个彩色的立方体;在接下来的介绍中,我不打算介绍OpenGL和Qt的知识,假设读者有所了解,如果想详细学习OpenGL的知识,我推荐如下链接:https://learnopengl-cn.github.io/ 步骤: (1) 创建用来存放着色器、V
【OpenGL】opengl shader内置变量和函数
1、uint CreateShader(enum type) : 创建空的shader object;   type: VERTEX_SHADER,2、void ShaderSource(uint shader, sizeicount, const **string, const int *length):加载shader源码进shader object;可能多个字符串3、void Compile...
Opengl Shader发光线条实例
转发请保持地址:http://blog.csdn.net/stalendp/article/details/21993227 这篇文章主要分析一个Shader,从而感受shader的魅力,并学习相关shader的函数的用法。 先看Shader运行的效果: 下面是代码: [cpp] view plain copy   S
(二)OpenGL中的Shader
学习总结自:http://learnopengl.com/#!Getting-started/Hello-Triangle http://learnopengl.com/#!Getting-started/Shaders 继上篇文章中提到,OpenGL是为了在GPU上同时跑成千上万个程序,在GPU上跑的这些小程序,称为Shader。准备我们在运行GPU程序前,得准备几样东西:1)输入数据。2)数
A06_OpenGL中显示文字
OpenGL中显示文字源码,程序中呈现关于如何在OpenGL中显示文字的方法
详解MVP矩阵之齐次坐标和ModelMatrix
其次坐标(Homogeneous Coordinates)其次坐标这个概念在第一次看real-time rendering 这本书的时候就有提起到,但当时看的一头雾水,只知道其次坐标在某些计算中比较方便,而事实上齐次坐标有着非常重要的意义和作用,主要是在处理三维透视方面,常用的几个地方,比如texture mapping 透视矫正,Projection Matrix的计算等等。在笛卡尔坐标系中,两
opengl使用Blin-phone模型计算镜面光照强度
由于计算镜面光光照强度,计算反射光非常耗时,可以使用Blin-phone模型来简化计算 效果图 blin-phone模型计算镜面反射光 片元shader uniform vec4 U_LightPos; //光源位置 uniform vec3 U_EyePos; //眼睛的位置 uniform vec4 U_AmbientLightColor;//环境光颜色 uniform vec4
opengl编程一(使用着色器)
openglopengl简介gl是一套图形编程API,是图形应用开发的工业标准接口,每个平台都有相应的实现。可视化的操作系统都提供了图形编程接口,通常这一系列的接口作为操作系统的一个系统服务,为客户提供窗口渲染。那为什么还用gl呢?系统提供的这些服务并不是针对gpu进行优化的,通常接口是为2d渲染提供服务的,3d没提供直接支持。还有各个平台的接口不一样,移植很困难。而使用opengl除了移植外,它针
OpenGL: 概念基础和shader例子
首先来明确几个基本的概念或者说是术语吧:1.渲染:将数学和图形数据转换为3D空间图像的操作就叫渲染2.变换,投影:这里一般指的是变换矩阵和投影矩阵,变换主要是用来处理顶点的位置,而投影则主要用来将3D坐标转换为二维屏幕坐标,投影又分为正投影和透视投影。3.光栅化:实际绘制和填充每个定点之间的像素形成线段就叫做光栅化4.着色:将颜色附着到对应的点或面上5纹理贴图:将一定格式的数据根据坐标指定,粘贴到
基于MFC的OpenGL shader编程--我的第一个shader
一.环境配置由于微软公司为了推销自己的产品DirectX,击败OpenGL,因此现在的windows操作系统只支持OpenGL1.1版本,而现在的OpengGL版本已经发展到了3.1,并且只有2.0以上的版本才支持GLSL语言,所以我们必须对操作系统上的OpenGL进行升级,那么应该如何升级呢?实际上,下载OpenGL2.0以上的开发库是没用的,因为windows只支持1.1版本。所以
C#在openGL应用
C#中开发openGL,讲解如何在C#中配置openGL,和初始化程序
OpenGL GLSL 语言 添加注释
OpenGL着色语言(GLSL―OpenGL Shading Language)是用来在OpenGL中着色编程的语言,也即开发人员写的短小的自定义程序,他们是在图形卡的GPU (Graphic Processor Unit图形处理单元)上执行的,代替了固定的渲染管线的一部分,使渲染管线中不同层次具有可编程型。比如:视图转换、投影转换等。GLSL(GL Shading Language)的着色器
UnityShader:MRT多重渲染
UnityShader:深度图获取,屏幕后期处理特效 中学习了如何使用unityshader处理摄像机画面,这次来看看多重渲染的使用。 有时候我们想同时获得一个画面的不同后期效果:比如需要同时显示深度图,RGB,像素化等,但是又不想进行多次处理浪费性能,这时候我们就需要多重渲染技术了,通过多重渲染技术,只需要一次就可以将我们想要处理的画面处理成我们需要的多种效果并输出。一、 多重渲染shader
OpenGL给Shader变量传递参数
首先需要了解Shader中变量的四个修饰符 varying:在顶点着色器和片元着色器中传递参数,在顶点着色器中被修改,在片元着色器中只读 uniform:一致变量,在一个图元绘制过程中不会改变 ,在opengl中传递参数到shader,在顶点着色器和片元着色器中使用 attribute:随不同顶点变化的全局变量,由opengl中传递值到shader,只能在顶点着色器只读 const:同c语
openGl学习之基本图元
从本篇开始,会给出一些代码实例,所以要配置好编译环境。 环境配置:vs2012下配置链接http://www.cnblogs.com/dreampursuer/archive/2014/05/27/3754528.html      vc++6.0下配置链接http://blog.csdn.net/hbuxiaoshe/article/details/5047564
[OSG]如何用Shader得到物体的世界坐标
来自:http://www.cnblogs.com/hesicong/archive/2008/05/27/1208312.html  最近群里面有个朋友问我关于如何得到OpenGL世界坐标的问题,当时我还弄错了,误以为gl_ModelViewMatrix*gl_Vertex就是世界坐标。因最近也突然遇到了世界坐标的问题,所以花了一些时间来研究这个问题,网上也有人问,但或许没有答案,或许是错的
Unity -Shader精讲(一)OpenGL,DirectX,CG选择 着色器选择
Unity 渲染需要两个组件 Mesh Filter 和 Mesh Renderer Mesh Filter : 存储一个Mesh(网格,模型的网格,就是模型的由哪些三角面组成,组成一个什么样子的模型,三角面的一些顶点信息) Mesh Renderer:用来渲染一个模型的外观,就是样子, 按照 mesh给它皮肤,给它颜色 通过Material(材质)控制模型渲染的样子 Material(材
opengl330在顶点中设置颜色shader中使用
opengl 设置顶点颜色传递给 片段 shader 绘制一个三角形 包含如何在vs2015以上配置 opengl glew glfw
vertex shader的输出、被插值后变成fragment shader的输入
OpenGL Shader笔记 发表于 2012-05-02 shader在GPU的多核中并行执行,vertex shader每个图元顶点执行一次,fragment shader每个图元像素执行一次 Shader的语法 OpenGL Shading Language是C的子集,稍有扩展 Storage Qualifier attribute: vertex sh
OpenGL 各个shader的作用和区别
OpenGL4.0发布了Tessellation shader(Control + Evaluation shader)。到OpenGL4.* 为止,现在OpenGL已经支持了5种不同类型的shader。 1.Vertex Shader,简称VS 2.TESS  Control  Shader (D3D11 叫Hull shader),简称TCS 3.TESS Evaluation Shad
OSG使用OpenGL顶点着色器和片元着色器
目的:使用OpenGL着色语言中的顶点和片元着色器,替代原有的固化函数管道的光照和材质计算,用于场景图形中的节点选择。(砖块着色器程序来自3DLabs) ------------------------------------ 概述:OpenGL着色语言允许程序员编写自己的像素和顶点着色器。有关着色语言的更多信息,包括最低的硬件和软件需求,请参阅:http://develop
OpenGL编程逐步深入(五)Uniform 变量
在这个教程中我们会遇到一种新的Shader变量类型,即uniform变量。attribute(属性)变量和uniform变量的不同之处在于attribute 变量中包含顶点的具体数据,当每次执行shader调用时会从顶点缓存中重新加载一个新的值。而uniform类型的变量在整个绘制调用中始终使用同一个变量。这意味着你在绘制调用前加载的值在每个vertex shader调用时能访问到相同的值。
Opengl建模技术在C#中的实现
介绍如何在C#中调用Opengl类库,实现可视化。
【OpenGL】Shader技巧集合
这篇文章将收集unity中使用shader的相关技巧和特效,会不断地更新内容。关于在Unity中使用shader的介绍,请参考《【OpenGL】使用Unity来学习OpenGL》 常用的内置uniform iResolution =》_ScreenParams iGlobalTime => _Time.y glFragCoord => float4 sp:WPOS  // 需要 #pr
OpenGL库
OpenGL开发库,包括如何在vc中利用
如何在MFC中调用OpenGL
讲述如何在MFC中调用OpenGL,并有代码说明
opengl shader内置变量和函数
1、uint CreateShader(enum type) : 创建空的shader object;    type: VERTEX_SHADER, 2、void ShaderSource(uint shader, sizeicount, const **string, const int *length):加载shader源码进shader object;可能多个字符串 3、
使用OpenGL开发三维GIS资料
关于如何在ArcEngine中使用OpenGL接口,以及如何进行三维建模,其中有一篇英文论文不错。
OpenGL-- Shader 多个纹理 变换
源码参考: http://learnopengl-cn.readthedocs.io/zh/latest/01%20Getting%20started/08%20Coordinate%20Systems/
openGL shader 的基本概念
openGL shader 的基本概念  月城雪兔 2016-08-24 22:36:17  使用OpenGL创造的物体,在最终被绘制出来之前,有一个流水线处理过程,该过程被称为graphics pipeline,或者rendering pipeline,期间大部分工作由GPU执行,跟GPU紧密相关。 随着GPU的发展,现在的GPU加入了可编程处理器,开发人员可直接控制G
在 opengl 中画出三角形并用 shader 改变颜色
/* glew.h 源代码中的一些宏定义 typedef unsigned int GLenum; typedef unsigned int GLbitfield; typedef unsigned int GLuint; typedef int GLint; typedef int GLsizei; typedef unsigned char GLboolean; typedef signed
OpenGL编程逐步深入(九)插值处理
注:文中VS代指顶点着色器,FS代指片段着色器。 这个教程和大家展示3d管道中非常重要的部分,即Interpolation(插值)。光栅化程序执行的插值变量由VS产生。正如你已经见到过的,为了在屏幕中显示一些有意义的东西,你需要在vertex shader中指定一个输出变量’gl_Position’。它是一个包含顶点坐标的有4个分量的向量。x/y/z分量会和w分量做除法运算,任何分量超出规范化正方形
如何在Unity中使用OpenGL函数绘制动态曲线图
通常GL在Unity中的用法是 1.在camera上贴脚本,并在OnPostRender()里执行。 2.挂在任何GameObject上,在OnRenderObject()里执行。 注意:  1.GL的线等基本图元并没有uv. 所有是没有贴图纹理影射的,shader里仅仅做的是单色计算或者对之前的影像加以处理。 2.GL所使用的shader里必须有Cull off指令,否则显示会变成
OPENGL 纹理贴图 过滤 mipmaps (shader)
文章来源于:http://www.opengl-tutorial.org/cn/beginners-tutorials/tutorial-5-a-textured-cube/ 本课学习如下几点: 什么是UV坐标怎样自行加载纹理怎样在OpenGL中使用纹理什么是过滤?什么是mipmap?怎样使用?怎样利用GLFW更加鲁棒地加载纹理?什么是alpha通道? 关于UV坐标 给
[OpenGL] 利用Shader实现复杂地形的渲染
我的新博客:http://ryuzhihao.cc/本文在我的新博客中的链接:http://ryuzhihao.cc/?p=217已经好久没写关于OpenGL的博客了。不过昨天晚上,和我一个可爱的小学弟做了一个娱乐程序,也正好用来写一篇博客。       我们在游戏中经常能见到一座高耸的山,雪线以上是白皑皑的积雪,雪线以下是郁郁葱葱的植被;抑或在某座地狱城探险时,碰见一座被熔岩侵蚀的山谷,在山谷缝...
什么是Shader里的lerp
float lerp(float a, float b, float w) { return a + w*(b-a); }
Shader中表达式和控制语句
新手写Shader时经常困惑在Shader那些语法能用,那些不能用,很纠结,下面就对Shader中表达式和控制语句进行一些总结:关系操作符CG中有6种关系操作符:“<”、“<=”、“!=”、“==”、“>=”、“>”,这个就不用说明含义了吧。CG语言表达式允许对向量使用关系操作,例如:float3 A=float3(0.5,0.1,0.9); float3 B=float3(0.6,-0.1,2.0
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数