- 博客(19)
- 收藏
- 关注
原创 使用C++实现OpenGL软光栅(7)-三角形贴图
上篇文章我们已经知道了如何画一个三角形,现在就学习如果在这个三角形上贴个图预期效果如图:原理其实说来也简单。
2025-01-10 16:55:38
161
原创 使用C++实现OpenGL软光栅(6)-画个三角形
前面学习了画点,画线,现在更进一步,画个三角形出来三角形其实就是三条线相交以及他们包裹的部分,对应了三个顶点。
2025-01-10 15:26:05
175
原创 使用C++实现OpenGL软光栅(5)-图片加载与颜色混合
这样在走到上面加了颜色混合后的DrawPoint时,如果有像素重合,就会根据传入的alpha值与255的比例作为权重进行绘制,达到颜色汇合的目的。由于stb_image最后返回的是一串字节bits(毕竟图片说白了就是位置信息+颜色信息),所以这里创建一个image类。接下来画图片的过程中,其实就是把image里面的mData离散成一个一个点画在屏幕上。如果在外部开启了颜色混合,则根据来源图片的alpha值的比例作为权重系数。直接就返回一个image对象,非常简单。然后在加载图片的时候,添加透明度的选项。
2024-12-29 17:58:08
185
原创 使用C++实现OpenGL软光栅(4)-三角形扫描算法
这个问题换在电脑上就是给出三个坐标,返回这三个坐标所包围的三角形的像素集合。给出屏幕上三个点,如何画出一个三角形呢?
2024-12-29 11:37:21
102
原创 使用C++实现OpenGL软光栅(3)-Brensenham直线算法
如果p小于0,则x步进1,y不变,y2 = y1 ,所以p2 = p1 + 2德塔y,所以在上面p大于0的时候需要多减2个德塔x的目的就在这。知道第一个点,先画第二个点,如果p大于0,则x步进1,y+1,则时p2 = p1 + 2德塔y - 2德塔x。但是这里面全是浮点数计算,更别说还有浮点数乘除,消耗太高,很不推荐。通过一系列枯燥的计算我们终于得到的结论,也就是上图中的代码。首先考虑特殊情况,然后将其他情况想办法转到该特殊情况即可。特殊情况就是最简单的,第一象限,且斜率在0到1之间。
2024-12-28 17:05:22
209
原创 使用C++实现OpenGL软光栅(2)-模拟GPU
而双缓冲绘图机制就更简单,不可能让用户看到绘图过程对吧,得直接让他们看到一整张图,所以就创建另一个HDC(简称HDC2),现在HDC2上一个像素一个像素地画图,然后直接全部复制到HDC1上,这样在用户看来就是一整张图同时被画好。而一个屏幕上肯定不止一个HDC,只要有窗口弹出来,系统就会为其分配一个虚拟的HDC,也就对应了一个独特的虚拟设备。handle of DC,也就是上面说的HDC,就是DC的句柄,表示当前显示设备的描述,比如长宽,像素格式等等。现在要更进一步,添加一个模拟GPU进行实际绘制。
2024-12-28 16:18:26
507
原创 使用C++实现OpenGL软光栅(1)-Windows绘制逻辑解析
一个最简单的windows窗体构建逻辑很简单,循环,事件,注册,生成,就这么几步即可,大部分都是调用windows的底层API。
2024-12-28 14:28:55
481
原创 猫课 MyFirstLight学习笔记
这样旋转物体 法线方向会随着物体的位置发生移动,原因是动态批处理需要从对象空间变换到世界空间,并且还要进行额外的排序,这些操作会影响到对象空间法线的方向。
2024-12-21 09:16:18
203
原创 LightMapping实战
确保Room和Monkey在场景中都是static对象,否则不能烘培如果美工建立的模型顶点不带UV通道数据,则需要勾选模型的生成UV数据选项,否则不能为每个对象单独生成光照贴图坐标信息monkey和room都是blend对象。
2023-06-02 08:33:56
8
原创 10.27Unity事件、场景烘焙、Render Texture
1.Unity的几种事件用法①eventusing System.Collections;using System.Collections.Generic;using UnityEngine;using System;using UnityEngine.UI;using UnityEngine.Events;public class CollisinEvent : UnityEvent<GameObject, GameObject> { }public class H
2021-10-28 09:28:40
2055
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人