Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >GLSL在RayTracing中的疑点

GLSL在RayTracing中的疑点
EN

Stack Overflow用户
提问于 2011-12-20 12:08:56
回答 2查看 2.3K关注 0票数 1

我正在尝试开发一个基本的光线追踪器。到目前为止,我已经计算了与平面和blinn-phong明暗处理的交点。我正在处理一个500*500的窗口,我的主要光线生成代码如下

代码语言:javascript
运行
AI代码解释
复制
vec3 rayDirection  =   vec3( gl_FragCoord.x-250.0,gl_FragCoord.y-250.0 , 10.0);

现在我怀疑上面的方法是对还是错。请给我一些见解。

我也有疑问,我们是否需要在OpenGL代码中构造几何,而在GLSL中构造rayTracing。例如,如果我试图光线跟踪一个平面,我需要使用glVertex2f在OpenGL代码中构造平面吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-20 13:34:19

vec3 rayDirection = vec3( gl_FragCoord.x-250.0,gl_FragCoord.y-250.0,10.0);

现在我怀疑上面的方法是对还是错。请给我一些见解。

预测没有对错之分。您也可以将视口像素映射到方位角和仰角。实际上,你做这件事的方式并不是那么糟糕。我只需要传递一个额外的统一的视口尺寸,而不是硬编码,并对向量进行标准化。从字面上看,Z分量的工作方式类似于焦距。

我也怀疑我们是否需要在OpenGL代码中构造几何,而在

中构造rayTracing。例如,如果我试图光线跟踪一个平面,我需要使用glVertex2f在OpenGL代码中构造平面吗?

光线跟踪作用于包含完整场景的全局描述。然而,OpenGL基元是纯本地的,即仅仅是单个三角形、线或点,并且OpenGL不维护场景数据库。因此,使用常用的OpenGL绘图函数传递的几何体不能进行光线追踪(至少不能以这种方式)。

这是使用GLSL进行光线跟踪的最大障碍:您需要以某种方式实现一种将整个场景作为可自由访问的缓冲区的方式。

票数 2
EN

Stack Overflow用户

发布于 2011-12-27 18:02:58

可以使用光线行进在单个片段着色器中渲染某些类型的复杂场景。这里有一些例子:(使用Chrome或FireFox,需要WebGL)

礼品盒:http://glsl.heroku.com/e#820.2

Torus之旅:http://glsl.heroku.com/e#794.0

圣诞树:http://glsl.heroku.com/e#729.0

莫杜特罗波利斯:http://glsl.heroku.com/e#327.0

让这些东西工作的关键是编写“距离函数”,告诉光线行进器它离物体表面有多远。有关距离函数的详细信息,请参阅:

http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8575221

复制
相关文章
GLSL 的若干优化策略
一个好的 Shader,特别是在低端机上跑效果,性能往往会有很大的提升,那么,就很有必要学习一下 GLSL Shader 性能优化的策略。
音视频开发进阶
2022/10/31
7950
[apue] popen/pclose 疑点解惑
当时怀疑是pclose关闭了使用完成的管道,因此在pclose之前加一个足够长的sleep,再次观察进程文件列表:
海海
2022/08/19
1830
[apue] popen/pclose 疑点解惑
Vue - 实战疑点总结
1.注册全局组件(是一个单vue页面组成的一个组件,而不是现拼的template结构) 结构: 代码:main.js import UserList from './components/UserLi
xing.org1^
2018/05/17
6210
GLSL ES 语言—函数
参数类型必须为前面教程中讲过的一种,或者像 main() 函数一样没有参数。如果函数没有返回值,可以不需要return语句,这种情况下函数的返回类型必须为void。
张晓衡
2019/09/11
1K0
GLSL版本的区别和对比
之前尝试将一个GLSL version 110的版本写成GLSL version 330的,在此将学习过程和收获记录下来。
Zoctopus
2018/12/14
4.8K0
GLSL-语法基础
3.1 字符集 GLSL用到的字符集是ASCII码的子集,主要包含下面的几部分: 字母 a-z,A-Z,以及下划线“_”。 数字 0-9 符号 .+-/*%<>[]{}()|$~=!:;,? 预处理器
wxdut.com
2018/06/19
2.4K0
GLSL-概述
OpenGL ES 2.0 管线 OpenGL ES的版本主要有1.x,2.x,3.x等等,目前最流行、适用范围最广的是2.x。从2.0开始,OpenGL引入管线的概念,摒弃之前的fixed func
wxdut.com
2018/06/19
7750
GLSL-变量和类型
基础类型 GLSL支持下面几种基本类型。 类型 解释 void void,函数不需要返回值时用这个 bool 布尔类型,true或者false int 有符号整数 float 有符号浮点数 vec2 包含2个float的向量 vec3 包含3个float的向量 vec4 包含4个float的向量 bvec2 包含2个bool的向量 bvec3 包含3个bool的向量 bvec4 包含4个bool的向量 ivec2 包含2个int的向量 ivec3 包含3个int的向量 ivec4 包含4个int的向量 ma
wxdut.com
2018/06/19
2.1K0
GLSL-内置函数
GLSL内置了若干类内置的便利函数,用于标量和向量的计算。其中很多内置函数可以用于多个类型的Shader,也有一些是提供了直接操作硬件的方法,这种一般只适用于特定的Shader。 内置函数大致分为三类: 提供方便的函数来操作硬件,比如提供操作texture map的函数。在GLSL中没有其他的方式可以模仿这些函数实现对应的功能。 提供很多小的工具函数,比如clamp、mix等等,可以供开发者很方便的调用,都是非常常用的,有一些是直接操作硬件的。编译器把这些函数映射到复杂的编译指令集是一件困难的事情。
wxdut.com
2018/06/19
6.2K1
GPU Ray Tracing简述
之前的《Ray Tracing简述》,我们介绍了光线追踪的基本概念。当我们实现了CPU版本的光线追踪时,我们自然会有一个念头,是否能够提供GPU版本的光线追踪。在这个过程中,主要分为三个步骤:可行性分型,性能瓶颈分析以及Ray Tracing的可编程渲染管线。
Peter Lu
2019/08/19
1.9K0
OpenGLES(九)- GLSL案例:灰度、旋转OpenGLES(九)- GLSL案例:灰度、旋转
OpenGLES(九)- GLSL案例:灰度 灰度滤镜 原图 灰度效果图 三通道图:图片每个像素点都有三个值(RGB)表示 ,所以就是三通道。也有四通道的图(RGBA)。RGB色彩模式是工业界的一种
用户8893176
2021/08/09
1.8K0
OpenGLES(九)- GLSL案例:灰度、旋转OpenGLES(九)- GLSL案例:灰度、旋转
看得让人DT的GLSL
GLES2.0封装到shader和vbo结合的部分, 蒙了 vertex layout(或叫vertex declaration)要一个一个element的绑定到一个shader变量上(GL叫attribute), 也就是相当于HLSL的VS_INPUT结构体吧. 问题是, GLSL里没有"semantic", 然后问题就来了 举个例子: 一个简单的顶点结构: struct Vertex   {       float3 position;       float3 normal;       float2
逍遥剑客
2018/05/23
7510
GLSL ES 语言 | 数组
GLSL ES 只支持一维数组,且没有 pop()、push() 等操作,声名数组只需要在变量后加上中括号"[ ]" 和数组长度,如下:
张晓衡
2019/09/11
1.9K0
GLSL ES 语言 | 数组
GLSL ES 语言—结构体
GLSL ES 中可以使用 struct关键字定义结构体,将已存在的数据类型聚合到一起,如下:
张晓衡
2019/09/11
1K0
GLSL ES 语言—结构体
GLSL ES 语言—内置函数
内置函数 GLSL ES 提供了很多内置函数,我们一起来看下: 角度函数 radians 角度制转孤度制 degrees 弧度制转角度制 三角函数 sin 正弦 cos 余弦 tan 正切 asin 反正弦 acos 反余弦 atan 反正切 指数函数 pow 开方 exp 自然指数 log 自然对数 exp2 2的x方 log2 以2为底对数 sqrt 开平方 inversesqrt 平开方的倒数 通用函数 abs 绝对值 min 最小值 max 最大值 mod 取余数 sign 取下负号 floor 向
张晓衡
2019/09/11
1.4K0
GLSL ES 语言—内置函数
OpenGLES(八)-GLSL案例:分屏滤镜原理OpenGLES(八)-GLSL案例:分屏滤镜原理
本文中着重介绍glsl的分屏逻辑,对于iOS端的代码就省略了。如果对这部分有兴趣跳转OpenGLES(五)- ESLS案例:纹理贴图
用户8893176
2021/08/09
1.3K0
OpenGLES(八)-GLSL案例:分屏滤镜原理OpenGLES(八)-GLSL案例:分屏滤镜原理
3.4 CG VS GLSL VS HLSL
Shader language 目前有 3 种主流语言:基于 OpenGL 的 GLSL(OpenGL Shading Language,也称为 GLslang),基于 Direct3D 的 HLSL(High Level Shading Language),还有 NVIDIA 公司的 Cg (C for Graphic)语言。
代码咖啡
2018/08/28
1.9K0
OpenGL ES GLSL滤镜实现(2)
01 — 原图GLSL 实现 顶点着色器代码: attribute vec4 Position; attribute vec2 TextureCoords; varying vec2 TextureCoordsVarying; void main (void) { gl_Position = Position; TextureCoordsVarying = TextureCoords; } 片元着色器代码 precision highp float; uniform sampler2D
CC老师
2019/07/30
1K0
GLSL ES 语言—变量数值类型
GLSL ES 要求你具体指明变量的数据类型: <类型> <变量名> 如 vec4 a_position。 在进行赋值操作(=)时,等号左右两侧的数据类型必须一样,否则会出错。
张晓衡
2019/09/11
3.2K0
GLSL ES 语言—矢量矩阵运算
矩阵右乘矢量的结果是矢量,其中每个分量都是原矢量中的对应分量,乘上矩阵对应行的每个元素的积的加和, 与下面等价:
张晓衡
2019/09/11
1.4K0
GLSL ES 语言—矢量矩阵运算

相似问题

敲除验证中的疑点

10

JavaMail程序中的疑点

33

功能测试中的疑点

11

Rails中的ActionMailer疑点

12

RayTracing,如何处理失真?

18
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档