光线追踪 10秒钟学会贴图纹理

在这里插入图片描述

首先把一张图片改名1.jpg 放在C盘

下面就是SOIL2库 读入图片 保存在 图片纹理 变量
SOIL2库 https://share.weiyun.com/EWOP778A

#define STB_IMAGE_IMPLEMENTATION
#include "SOIL2\stb_image.h" //包含头
#pragma comment(lib,"SOIL2.lib") //包含库
unsigned char* 图片纹理;//图片内存
int nx, ny, nn;

int main()
{
	图片纹理 = stbi_load("C:\\1.jpg", &nx, &ny, &nn, 0);

``//....`

 


下面是计算UV贴图的取出材质图片颜色 2个函数

//输入u和v,输出对应图片像素的rgb值
vec3 取uv对应图片颜色(float u, float v) //p为命中终点坐标
{
	int i = int((u)* nx);//求出像素索引
	int j = int((1 - v)*ny - 0.001f);
	if (i < 0) i = 0;
	if (j < 0) j = 0;
	if (i > nx - 1) i = nx - 1;
	if (j > ny - 1) j = ny - 1;
	float r = int(图片纹理[3 * i + 3 * nx*j]) / 255.0f;
	float g = int(图片纹理[3 * i + 3 * nx*j + 1]) / 255.0f;
	float b = int(图片纹理[3 * i + 3 * nx*j + 2]) / 255.0f;
	return vec3(r,g,b);
}


#define pi 3.1415926f
//输入命中点p的坐标,输出纹理坐标u,v
void 计算UV坐标(const vec3& p, double& u, double& v) {
	auto phi = atan2(p.z, p.x);
	auto theta = asin(p.y);
	u = 1 - (phi + pi) / (2 * pi);
	v = (theta + pi / 2) / pi;
}

怎么调用这2个函数
在光线求交函数中得到 光线和三角形顶点 交点

		double u,v;
		计算UV坐标(res.光线命中点, u, v);//光线命中点 求出 返回uv坐标
		res.material.color = 取uv对应图片颜色(u, v);//这里没有对应三角形的贴图, 多个图片 自己读入模型 进行区分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值