标签: shader

用于不同形式色盲的RGB滤镜

我的父亲是色盲,并且考虑到我在视觉效果很重要的游戏中工作,我一直想为屏幕截图(甚至是某种类型的着色器)编写模拟不同形式色盲的过滤器.

我见过很多参考文献,但从来没有能够追踪算法.

任何算法将不胜感激.

graphics shader colors blindness

14
推荐指数
1
解决办法
8728
查看次数

OpenGL 3.1-4.1新增和已弃用的功能

我一直在使用OpenGL了大约一年了,学到了很多东西.不幸的是我的方式得知这是旧的预3.x的方式,这意味着即时模式,默认着色器,矩阵堆栈等我或多或少都有哪些通过观察OpenGL的规格已经从再改为现在的想法,但是我并不完全了解一些新的做事方式.

从我的理解,他们摆脱了矩阵堆叠的,这意味着你必须跟踪自己的变换矩阵,这似乎并没有太复杂的.他们还摆脱了直接模式,这意味着你现在需要使用维也纳组织或VAOs(永远不知道哪一个,或许两个..)发送像素/正常/纹理等.着色器程序的信息.我真的不明白这些对象的工作方式,我认为你需要把所有的信息放进去,并提供某种形式的OFSET显示像素,正常和纹理坐标之间的分隔符.有人可以简单解释一下这实际上是如何工作的(或者给我一个解释它的链接)?我尝试维基百科和谷歌搜索,但发现自己还是没有完全理解它们.

我想更多地了解的另一点是着色器,因为我从未使用它们.我不会问如何编写它们或任何东西,只需要在那里进行什么以及opengl仍然为你做什么.更具体地说,您需要在着色器中执行哪些操作才能获得基本渲染程序?我知道你需要做所有的计算并使用你的矩阵来计算真实的顶点位置.但是opengl是否仍然会处理背面剔除,线条剪裁,多边形填充和其他较低级别的问题,或者您是否必须将它们编码到着色器中(或者它们甚至不属于着色器)?

opengl shader rendering

14
推荐指数
1
解决办法
1975
查看次数

什么是学习着色器程序的最佳工具?

我最近一直在做一些DirectX 10工作,我正在寻求转向DirectX 11和Shader Model 5.0.我过去曾写过一些非常简单的着色器,我正在寻求拓宽视野,开拓更复杂的着色器.我的问题有点多重:

  1. 什么是编程着色器的最佳工具?我只使用了visual studio和SOME FX作曲家 - 阅读:足以打开它并查看它.

  2. gfx卡的品牌是否会影响您可以编程的着色器类型?

    • 我问的原因是,似乎Nvidia有更好的工具,ATI似乎取消了RenderMonkey.我似乎没有看到任何替代品?我错了吗?
  3. 排序与#1相同的问题,但如果您打算编写DirectX着色器而非特定于供应商,是否可以使用跨供应商工具?

    • 如果您需要针对特定​​供应商,Nvidia通常会有更好的工具吗?我现在真的很喜欢ATI,因为它们似乎是最好的降压(我有一块AMD主板) - 但我犹豫不决,因为我主要使用我的gfx卡进行编程.

c++ directx shader directx-10

14
推荐指数
1
解决办法
1619
查看次数

OpenGL ES 2.0 Shader最佳实践

我一直在寻找OpenGL着色器的例子,我看到了一些不同的风格.一些着色器专门使用内置类型(即gl_Vertex)与应用程序代码和着色器之间传输数据.

一些着色器使用变化类型将数据从顶点传输到片段着色器而不是gl_Position和gl_FragColor.

一些着色器使用前缀'in'和'out'来指定数据传输:

in vec3 vertex;

void main() {
    gl_Position = projection_matrix * modelview_matrix * vec4(vertex, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

...而其他人使用属性:

attribute vec4 vertex_attrib;
attribute vec4 tex_coord_attrib;
attribute vec4 color_attrib;
uniform mat4 mvp_matrix;
uniform mat4 texture_matrix;
varying vec4 frag_color;
varying vec2 tex_coord;

void main(void)
{
  gl_Position = mvp_matrix * vertex_attrib;
  vec4 transformed_tex_coord = texture_matrix * tex_coord_attrib;
  tex_coord = transformed_tex_coord.st / transformed_tex_coord.q;
  frag_color = color_attrib;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,GLES 2.0中编写着色器的首选方法是什么?有最佳实践指南吗?有人可以提供一个顶点和片段着色器的例子,它是"怎样做"的光辉榜样?

谢谢.

shader opengl-es glsl

14
推荐指数
2
解决办法
2万
查看次数

如何使用Android摄像头与OpenGL ES工作?

我想使用OpenGL ES进行Android相机预览并保存捕获的图像.

我喜欢在Android相机中使用OpenGL ES来为Android相机提供一些效果.所以请有人告诉我该怎么做?

shader android opengl-es android-camera opengl-es-2.0

14
推荐指数
1
解决办法
5016
查看次数

在QML中绘制虚线和点线贝塞尔曲线

我已经看到在QML有一个Bezier曲线的示例实现,但我正在寻找一个如何实现虚线或点状贝塞尔曲线的提示.据我所知,Bezier曲线示例的作者QSGGeometryNode用于存储内部,QSGGeometryQSGFlatColorMaterial在其上应用了材料.然后,他们只需创建点列表并在它们之间绘制段.

是否有可能写一个shader,并把它应用到QSGFlatColorMaterial(以显示线dashed,dotted等等)?

最终,是否可以存储多个QSGGeometry内部QSGGeometryNode

UPDATE

我想在"纯QtQuick"中实现它- 而不是在"旧"接口(例如QPainter etc)中 - 因为我不想使用切换上下文(openGL和CPU)的东西.我更喜欢使用自定义着色器的解决方案(如果它可行) - 因为我将有更多的可能性来实现自定义外观(虚线,溺爱,彩色,可能是动画等).

如果不可能,我会用QPainter.

c++ opengl shader qt qml

14
推荐指数
1
解决办法
7971
查看次数

着色器位置vec4或vec3

我已经阅读了一些关于GLSL的教程.在某些位置属性是某些vec3中的vec4.我知道矩阵运算需要一个vec4,但是值得发送一个额外的元素吗?发送vec3并稍后在着色器vec4(位置,1.0)中投射是不是更好?内存中的数据越少 - 速度越快?或者我们应该包装一个额外的元素,以避免铸造?

什么提示应该更好?

layout(location = 0) in vec4 position;
MVP*position;
Run Code Online (Sandbox Code Playgroud)

要么

layout(location = 0) in vec3 position;
MVP*vec4(position,1.0);
Run Code Online (Sandbox Code Playgroud)

opengl performance shader vector glsl

14
推荐指数
1
解决办法
7365
查看次数

使用着色器进行计算

是否可以使用着色器计算某些值,然后将它们返回以供进一步使用?

例如,我将网格向下发送到GPU,有一些关于如何修改它的参数(改变顶点的位置),并收回结果网格?我认为这是不可能的,因为我没有看到任何从着色器到CPU的通信变量.我正在使用GLSL,所以只有统一,属性和变化.我应该使用属性还是制服,渲染后它们是否仍然有效?我可以更改这些变量的值并在CPU中读回吗?有一些方法可以在GPU中映射数据但是这些方法会被更改和有效吗?

这是我正在考虑的方式,虽然可能有其他方式,这对我来说是不可知的.如果有人能解释我的话,我会很高兴,因为我刚读了一些关于GLSL的书,现在我想编写更复杂的着色器,我不想放弃目前不可能的方法.

谢谢

shader data-transfer glsl

13
推荐指数
1
解决办法
5466
查看次数

是在GPU还是CPU上编译OpenGL着色器?GPU制造商如何改变二进制输出?

第一; 如何编译OpenGL着色器?它们是在CPU或GPU上编译的,还是因实现而有所不同?不同的供应商有不同的二进制输出; 如果是这样,是否有可能在另一个GPU上交叉编译一个GPU类型的二进制文件?我正在开发一款我计划在英特尔GFX芯片,ATI卡和NVidia卡上运行的游戏.我宁愿只发送着色器的二进制部分,而不必在客户端计算机上编译源代码.这可能吗?着色器编译过程如何工作?

opengl shader compilation

13
推荐指数
1
解决办法
1501
查看次数

GLSL着色器中的常量浮点值 - 使用制服的任何理由?

我正在查看使用着色器的OpenGL应用程序的来源.一个特殊的着色器看起来像这样:

uniform float someConstantValue;
void main()
{
    // Use someConstantValue
}
Run Code Online (Sandbox Code Playgroud)

统一是从代码设置一次,并且在整个应用程序运行时都不会更改.

在什么情况下我想宣布someConstantValue为a uniform而不是const float

编辑: 只是为了澄清,常数值是物理常数.

opengl shader constants glsl

13
推荐指数
2
解决办法
2万
查看次数