首先把一张图片改名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);//这里没有对应三角形的贴图, 多个图片 自己读入模型 进行区分