标签: shader

如何创建高分辨率的屏幕外片段着色器?

我发现我的片段着色器仅限于OpenGL ES视口的像素尺寸.

我可以创建一个"屏幕外片段着色器"或渲染环境,它具有更多像素用于渲染吗?

iphone shader opengl-es fragment-shader opengl-es-2.0

0
推荐指数
1
解决办法
317
查看次数

OpenGL - 使用glDrawElements的着色器

我很好奇你如何指定使用glDrawElements()渲染时使用的着色器.它是使用绑定的最后一个着色器吗?或者你必须使用其他命令.

总结一下:当我使用glDrawElements()时,如何指定使用哪个着色器,即将在我渲染的VBO中的三角形上使用的着色器.

opengl shader render

0
推荐指数
1
解决办法
831
查看次数

不得不改变纹理的精度,为什么?

我在片段着色器上做了一些工作,允许纹理渲染和颜色渲染.在我做了更改后,我的所有纹理都非常像素化(就像一个旧的8位游戏),我不得不提高纹理坐标的精度到中等.这也给我带来了性能影响.我只是不明白为什么我突然不得不首先改变精度.

这是"原始"着色器:

varying lowp vec2 TexCoordOut;
uniform sampler2D Texture;

uniform lowp float opacity;

void main(void) {
    gl_FragColor = opacity * texture2D(Texture, TexCoordOut);
}
Run Code Online (Sandbox Code Playgroud)

这是着色器在更改后的样子:

varying mediump vec2 TexCoordOut;
uniform sampler2D Texture;

uniform lowp vec4 color;
uniform lowp float opacity;
uniform int colorRender;

void main(void) {
    if (colorRender == 1)
    {
        gl_FragColor = color;
    } else {
        gl_FragColor = opacity * texture2D(Texture, TexCoordOut);
    }
}
Run Code Online (Sandbox Code Playgroud)

shader opengl-es glsl

0
推荐指数
1
解决办法
2005
查看次数

能够多次附加/链接着色器有什么意义?

有些东西我对OpenGL并不完全了解:根据我正在阅读的所有内容,通过将着色器编译得足够长以将它们附加到程序中来获得最佳性能,然后建议您将着色器本身删除为可用内存,只需跟踪程序,直到删除它为止.

所以我的问题是:如果上述情况属实,那么在创建程序后能够附加着色器并重新链接程序的目的是什么?在场景创建期间创建第二个着色器程序并在它们之间交换而不是分离/附加和重新链接程序是不是更有效?

opengl performance shader

0
推荐指数
1
解决办法
140
查看次数

C++表示我的最高着色器模型是3

我试图通过使用if(caps.VertexShaderVersion < D3DVS_VERSION(i, 0)){return false;}我想要检查的着色器模型来检测我的图形卡在C++中具有的最高着色器模型是什么,但我只能达到3.

问题是我已经检查了我的显卡(Gigabyte GeForce GTX 470)并且它有DirectX 11所以不应该有Shader Model 5吗?或者我正在检查Shader模型的方式有问题吗?

c++ directx shader

0
推荐指数
1
解决办法
177
查看次数

GLSL着色器中的链接器错误?

我正在使用着色器编写程序,并在运行构建的exe时遇到一些错误.

着色器程序无法链接

片段着色器使用不同的颜色,但以前的着色器不会写入它.

出于资源错误.

这是我的代码:

example.cpp:

// Two-Dimensional Sierpinski Gasket       
// Generated using randomly selected vertices and bisection

#include "Angel.h"

const int NumTimesToSubdivide = 5;
const int NumTetraeder = 1024;
const int NumVertices = 9 * NumTetraeder;

vec4 points[NumVertices];
int Index = 0;

int fps = 20;
float angle_param = 0.5;

float etime;
GLint time_loc;

//----------------------------------------------------------------------------


void triangle(const vec4& a, const vec4& b, const vec4& c)
{
   points[Index++] = a;
   points[Index++] = b;
   points[Index++] = c;
}

void divide_tetraeder(const vec4& …
Run Code Online (Sandbox Code Playgroud)

c++ opengl shader glsl

0
推荐指数
1
解决办法
2394
查看次数

THREE.js中材料的不透明度

我正在使用兰伯特着色器,例如,它设置材料如下:

  this.material.uniforms.emissive.value = new THREE.Color(
  Math.random(),
  Math.random(),
  Math.random());
Run Code Online (Sandbox Code Playgroud)

在我拥有一个简单的着色器之前,我需要像这样设置材质来控制Alpha:

this.material.uniforms.color.value = new THREE.Vector4(
  Math.random(),
  Math.random(),
  Math.random(),
  0.3)
Run Code Online (Sandbox Code Playgroud)

但是看起来朗伯着色器没有颜色vector4。

关于如何控制Alpha的任何想法?

我从这里对lambert着色器使用相同的示例:https : //forge.autodesk.com/blog/forge-viewer-custom-shaders-part-2

而且简单的着色器来自:http : //adndevblog.typepad.com/cloud_and_mobile/2017/01/forge-viewer-custom-shaders-part-1.html

javascript shader three.js autodesk-forge

0
推荐指数
1
解决办法
5312
查看次数

轮廓轮廓着色器

我正在尝试实现GLSL着色器,该着色器将突出显示渲染的3D网格的外部边缘。问题是我无权访问OpenGL客户端代码,因此只能在GLSL着色器中完成。

我的第一个尝试是从Unity使用/采用着色器,并在OpenGL GLSL中进行操作。这里看起来应该是这样:

在此处输入图片说明

这是我得到的:

在此处输入图片说明

我不确定我是否可以正确计算内容,但是如您所见,输出与我的期望值相差甚远。

这是食人魔的材料

material Chassis 
    {
    technique
        {    
        pass standard
            {
            cull_software back         
            scene_blend zero one
            }
        pass psssm
            {         
            cull_software front 
            scene_blend src_alpha one_minus_src_alpha         
            vertex_program_ref reflection_cube_specularmap_normalmap_vs100 
                {
                param_named_auto modelViewProjectionMatrix worldviewproj_matrix
                param_named_auto normalMatrix inverse_transpose_world_matrix
                param_named_auto modelView worldview_matrix
                param_named_auto camera_world_position camera_position
                param_named_auto inverse_projection_matrix inverse_projection_matrix
                param_named_auto  projection_matrix projection_matrix
                param_named_auto  p_InverseModelView inverse_worldview_matrix
                }
            fragment_program_ref reflection_cube_specularmap_normalmap_fs100
                {                
                }    
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是顶点着色器

material Chassis 
    {
    technique
        { …
Run Code Online (Sandbox Code Playgroud)

opengl shader glsl vertex-shader

0
推荐指数
1
解决办法
2832
查看次数

有没有办法在OpenGL着色器中丢弃几何,顶点或片段?

我正在使用实例渲染来绘制大量的立方体.现在,显然立方体中可见面的最大数量是3,这意味着就着色而言,我所做的工作量是所需的两倍.

因为这是实例化,所以我不能简单地只传递要绘制到着色器的几何体.但是如果在着色器中(我想象这将是几何形状或细分)我可以使用普通信息来丢弃基元,我可以减少不必要的操作数量.

例如,如果观察方向和表面法线之间的角度小于90度,我可以假设在当前方向前面有一个三角形,因此丢弃了这个给定的图元.

在管道中是否有一种方法可以确定是否需要片段并相应地丢弃它?

opengl shader glsl geometry-shader

0
推荐指数
1
解决办法
1468
查看次数

3D对象以看起来像2D对象的方式着色

我正在使用以下着色器源代码来实现顶点和片段.

顶点着色器源:

#define highp
attribute highp vec3 position;
uniform highp mat4 mvp;
void main(void)
{
    gl_Position = mvp * vec4(position, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

片段着色器源:

#define highp
uniform highp vec3 color;
void main(void)
{
    gl_FragColor = vec4(color, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

但是,着色器无法正常工作.如下面的屏幕截图所示,3D对象的颜色就像2D对象一样:

3D对象的颜色类似于2D对象


glGetShaderiv带有GL_COMPILE_STATUS返回success == TRUE,因此没有着色器编译错误.

glGetShaderiv(shaderObj, GL_COMPILE_STATUS, &success);
Run Code Online (Sandbox Code Playgroud)

我没有尝试glGetError()代码.我要去尝试一下.但我怀疑我没有收到任何OpenGL错误.


我相信我需要调整color顶点和片段着色器.我应该如何调整着色器源中的颜色?任何人都可以通过暗示来帮助我.到目前为止,我无法通过修改源来解决问题.


UPDATE

在@ Rabbid76 的帮助下,3D对象看起来很不错:

3D对象现在看起来不错:)

我正在使用@ Rabbid76代码进行一些小修改:将#version 130顶点和片段着色器源添加到顶部.看起来我的英特尔显卡需要该#version 130指令,否则会引发一些警告和错误:

警告:片段着色器中不支持扩展"GL_OES_standard_derivative"

#version 130指令解决了上述警告及其后续错误.

shader lighting opengl-es glsl fragment-shader

0
推荐指数
1
解决办法
115
查看次数