- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
它还绘制了多个三角形,它们都发生了位移并且比例错误。我正在尝试自己实现三角形光栅化器,位于:
我不知道我的代码有什么问题。
#include<fstream>
#include<cmath>
class Vertice
{
public:
float x, y;
Vertice(float x, float y)
{
this->x = x;
this->y = y;
}
void fitToImage(int imageWidth, int imageHeight)
{
x = (x * (imageWidth / 2)) + (imageWidth / 2);
y = (-y * (imageHeight / 2)) + (imageHeight / 2);
}
};
class Image
{
public:
int imageWidth, imageHeight;
unsigned char* pixels;
Image(int imageWidth, int imageHeight)
{
this->imageWidth = imageWidth;
this->imageHeight = imageHeight;
pixels = new unsigned char[imageWidth * imageHeight * 3];
}
~Image()
{
delete[] pixels;
}
void setPixel(int x, int y, int red, int green, int blue)
{
int help_var = ((y * imageHeight) + x) * 3;
pixels[help_var + 0] = (char)red;
pixels[help_var + 1] = (char)green;
pixels[help_var + 2] = (char)blue;
}
void fillPixels(int red, int green, int blue)
{
int help_var = imageWidth * imageHeight * 3;
for (int i = 0; i < help_var; i += 3) {
pixels[i + 0] = (char)red;
pixels[i + 1] = (char)green;
pixels[i + 2] = (char)blue;
}
}
//-------------------BARYCENTRIC TRIANGLE RASTERISATION------------------------
float edgeFunction(const Vertice& A, const Vertice& B, const Vertice& P)
{
return ((P.x - A.x)*(B.y - A.y) + (P.y - A.y)*(B.x - A.x));
}
void fillTriangleBarycentric(const Vertice& v0, const Vertice& v1, const Vertice& v2)
{
Vertice p(0.0f, 0.0f);
for (int x = 0; x < imageWidth; x++) {
for (int y = 0; y < imageHeight; y++) {
p.x = x + 0.5f; p.y = y + 0.5f;
float w0 = edgeFunction(v1, v2, p);
float w1 = edgeFunction(v2, v0, p);
float w2 = edgeFunction(v0, v1, p);
if (w0 >= 0 && w1 >= 0 && w2 >= 0) {
setPixel(x, y, 0, 0, 255);
}
}
}
}
//-----------------------------------------------------------------------------
};
int main()
{
Image image(800, 600);
image.fillPixels(255, 255, 255);
Vertice a(0.2f, 0.5f);
Vertice b(-0.5f, 0.0f);
Vertice c(0.5f, -0.5f);
a.fitToImage(image.imageWidth, image.imageHeight);
b.fitToImage(image.imageWidth, image.imageHeight);
c.fitToImage(image.imageWidth, image.imageHeight);
image.fillTriangleBarycentric(a, b, c);
std::ofstream imageFile;
imageFile.open("./drawing_triangle_test_image.ppm");
imageFile << "P6\n" << image.imageWidth << " " << image.imageHeight << "\n255\n";
imageFile.write((char*)image.pixels, image.imageWidth * image.imageHeight * 3);
imageFile.close();
return 0;
}
这是我运行程序后得到的图像。
感谢您的帮助!
最佳答案
y * imageHeight
绝对是您的代码的错误类型(可能有多个实例)。您需要将 y 位置乘以 宽度。否则,您最终会在随机的 x 位置交错三角形。
您得到四个三角形的事实与 800/600 简化为 4/3 有关。如果您通过 603 渲染到 797,您可能会得到一些随机的水平线。
关于c++ - 我的重心三角形光栅器每三个像素绘制一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51504621/
我正在尝试使用 R 中的 raster 包从光栅对象中提取轮廓线。 rasterToContour 似乎工作良好并且绘制得很好,但在调查时发现轮廓线被分解成不规则的线段。来自 ?rasterToCon
我有两个光栅对象 > x1 class : RasterLayer dimensions : 36, 72, 2592 (nrow, ncol, ncell) resolution
我已经看到与CUPS库相关的两个文件: OpenPrinting/cups-filters/blob/master/filter/imagetoraster.c OpenPrinting/cups-f
有没有办法确保绘图周围的框与栅格范围完全匹配?在下面的内容中,根据设备的比例,在栅格的上方,下方或左侧和右侧都有一个间隙: require(raster) r = raster() r[]= 1 pl
我有下面的代码,可以将图像保存到我的电脑上。我想将该图像绕其中心(或左下角)旋转 45,90 和 135 度,然后另存为 3 个不同的图像。我怎样才能做到这一点? library(raster) r1
我有热敏打印机 X330,我需要打印和从 android 相机获取图像(位图),但我不能...我总是在打印机中得到符号。 文档中说: 打印光栅位图 十六进制 1D 76 30 m xL xH yL y
我是 python 的初学者,我仍在熟悉它的库,如果这是一个新手问题,我很抱歉。我只想显示 4 个波段(R、G、B、NIR)的图像。我想删除 NIR 并保留其他 3 个。我该怎么做?由于 raster
我知道这似乎是一个奇怪的问题,而且确实如此!但是利用 Windows 已经安装的固定宽度字体(例如:Fixedsys)我会节省很多大小(因为我想让最终的 EXE 尽可能小) 从 Windows 上现有
要求: 保留图形模式 API 仅适用于 2D 对象(尽管这些 2D 对象的 3D 变换很有趣) 跨平台 矢量图形绘制 光栅合成 + 支持不透明蒙版 - 当然是硬件加速... 动画 API 封装大小 -
我还在 SO 的 GIS 部分发布了这个问题。因为我不确定这是否是一个“纯”python 问题,所以我也在这里再次提问。 我想知道是否有人在不使用 ArcGIS 的情况下从栅格获取高程数据有一些经验,
我是一名优秀的程序员,十分优秀!