optix之纹理使用
1、在OpenGL中生成纹理texture
optix中的纹理直接使用OpenGL纹理的id,不能跨越OpenGL纹理,所以我们先在OpenGL环境下生成一张纹理。
这个过程就很熟悉了:
void WKS::Texture::GenTextureFromFile(const char* name, std::string directory) { std::string fileName = directory + '/' + std::string(name);
int width, height, channel;
unsigned char* image = SOIL_load_image(fileName.c_str(), &width, &height, &channel, SOIL_LOAD_RGBA);
//Assign texture to ID;
glGenTextures(, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
//Parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, , GL_RGBA32F, width, height, , GL_RGBA, GL_UNSIGNED_BYTE, image);
glGenerateMipmap(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, );
SOIL_free_image_data(image);
}
这个本来很简单,但是我在这儿遇到了一个错误,将此生成的纹理放入Optix出现了错误:
原因是我之前在上面红色显示的纹理格式处使用的 GL_RGB,这样写在OpenGL中毫无问题,但是引入Optix中出现了上图错误,耽搁了很长时间。
2、Optix中生成TextureSampler 对象,并绑定到Program中
生成TextureSampler 对象:
OptixTexture(optix::Context& context, GLuint texid) {
textureSampler = context->createTextureSamplerFromGLImage(texid, RT_TARGET_GL_TEXTURE_2D);
textureSampler->setWrapMode(, RT_WRAP_CLAMP_TO_EDGE);
textureSampler->setWrapMode(, RT_WRAP_CLAMP_TO_EDGE);
textureSampler->setIndexingMode(RT_TEXTURE_INDEX_ARRAY_INDEX);
textureSampler->setReadMode(RT_TEXTURE_READ_ELEMENT_TYPE);
textureSampler->setMaxAnisotropy(1.0f);
textureSampler->setFilteringModes(RT_FILTER_NEAREST, RT_FILTER_NEAREST, RT_FILTER_NONE);
}
绑定到Program中:
void BindSampler(optix::Context& context, const char* target) {
context[target]->setTextureSampler(this->textureSampler);
}
Host中的调用方式:
this->tex_wall = new WKS::Texture("back.jpg", "source/texture/skybox");
this->optixTexture = new OptixTexture(context, tex_wall->GetTextureID());
this->optixTexture->BindSampler(context, "tex_wall");
3、Program 中的纹理使用(纹理访问)
输入声明:
//输入纹理
rtTextureSampler<float4, > tex_wall;
访问:
float4 color = tex2D(tex_wall, launch_index.x*1.0f/screen.x, 1.0f-launch_index.y*1.0f/screen.y);
效果:(输入一张图,显示出来)
optix之纹理使用的更多相关文章
- 搭建 Optix 环境
我参考了 第0个示例 OptixHello 学习Optix的工程配置以及基本框架 的配置过程,该文对于 Optix 的框架介绍的很好,但是按照该文配置遇到了一些问题,我花费了一番功夫自己摸索终于配置好 ...
- OpenGL: 纹理采样 texture sample
Sampler (GLSL) Sampler通常是在Fragment shader(片元着色器)内定义的,这是一个uniform类型的变量,即处理不同的片元时这个变量是一致不变的.一个sampler和 ...
- CSharpGL(10)两个纹理叠加
CSharpGL(10)两个纹理叠加 本文很简单,只说明如何用shader实现叠加两个纹理的效果. 另外,最近CSharpGL对渲染框架做了修改,清理一些别扭的内容(DoRender()前后的事件都去 ...
- CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探
CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...
- D3D三层Texture纹理经像素着色器实现渲染YUV420P
简单记录一下这两天用Texture实现渲染YUV420P的一些要点. 在视频播放的过程中,有的时候解码出来的数据是YUV420P的.表面(surface)通过设置参数是可以渲染YUV420P的,但Te ...
- 【转】OpenGL多线程创建纹理,附加我的测试结果
原文地址 http://www.cnblogs.com/mazhenyu/archive/2010/04/29/1724190.html 关于这个问题以前只知道多个线程不能同时使用一个RC,结果为了能 ...
- Mipmap与纹理过滤
为了加快渲染速度和减少纹理锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为Mipmap. 使用DirectX Texture Tool(DX自带工具)预生成Mipmap ...
- WebGL入门教程(五)-webgl纹理
前面文章: WebGL入门教程(一)-初识webgl WebGL入门教程(二)-webgl绘制三角形 WebGL入门教程(三)-webgl动画 WebGL入门教程(四)-webgl颜色 这里就需要用到 ...
- [转]各种移动GPU压缩纹理的使用方法
介绍了各种移动设备所使用的GPU,以及各个GPU所支持的压缩纹理的格式和使用方法.1. 移动GPU大全 目前移动市场的GPU主要有四大厂商系列:1)Imagination Technologies的P ...
随机推荐
- c#实现SharedMatting抠图算法
内容简介 将Alpha Matting抠图算法由c++ 版本移植至c#环境. 主要采用OpenCV的C#版本Emgu取代c++支撑的OpenCV. 参考资料 http://www.inf.ufrgs. ...
- Asp.net Core3.0 跨域配置
原文:http://www.zilaohu.cn/Jie/Detail_Jie?ID=78840a04-55b8-4988-80b2-f964fd822d63 下面配置后:被拒绝的域请求后,可以进入方 ...
- 2.Python 赋值与内存
定义变量和赋值其实就是系统处理内存的过程和问题,这篇文章分别从申请和释放内存两部分讨论 一.申请内存 python定义一个变量时,会为变量的对象申请一个内存,该变量会存储指向该对象内存中的地址 这 ...
- English:Day-to-day 1104
\ ------------------------------ editor by enomothem ------------------------------ It snowed throug ...
- 50-overlay 如何实现跨主机通信?
上一节我们在 host1 中运行了容器 bbox1,今天将详细讨论 overlay 网络跨主机通信的原理. 在 host2 中运行容器 bbox2: bbox2 IP 为 10.0.0.3,可以直接 ...
- mysql5.7 找回密码
初次接触数据库,二进制安装了mysql5.7以后发现无法像yum一样在日志中找回初始密码~so 首先关掉启动的数据库: 在my.cnf中新增一句: skip-grant-tables 保存退出重启m ...
- cURL无法访问TLS网站故障解决
大多数人都厌烦使用老旧的系统,无论软件还是硬件.但有的时候又不得不困守其中,坚持延续着系统的寿命,或者还需要点几柱香,祈求神佛的护佑. Linux是一个模块化极好的操作系统,得益于此,当其中有组件落伍 ...
- PHP危险函数
部分内容转载 https://www.jianshu.com/p/277294c1a9f8 https://www.cnblogs.com/yewooo00/p/7551083.html 信息泄露 1 ...
- java之数据结构
数据结构有什么用? 现实世界的存储,我们使用的工具和建模.每种数据结构有自己的优点和缺点,想想如果Google的数据用的是数组的存储,我们还能方便地查询到所需要的数据吗?而算法,在这么多的数据中如何做 ...
- jQuery 源码解析(二十三) DOM操作模块 替换元素 详解
本节说一下DOM操作模块里的替换元素模块,该模块可将当前匹配的元素替换指定的DOM元素,有两个方法,如下: replaceWith(value) ;使用提供的新内容来替换匹配元素集合中的每个元 ...