JavaScript实现软件光栅化渲染器01-如何画点

项目代码:https://github.com/foupwang/JavaScript3DRenderer
开发环境:VSCode+Chrome浏览器
参考:《Windows游戏编程大师技巧》(第2版) /《3D游戏编程大师技巧》(André LaMothe)
QQ交流群:1148938167(欢迎加入探讨图形渲染技术)

整个项目跟平台相关的,只需要一个类似DrawPixel的绘制像素功能,其它的全部使用代码实现。

因为是基于浏览器运行,所以我们使用网页Canvas的画点功能。

1、新建一个DrawPoint.html文件,内容如下:

<!DOCTYPE html>
<html lang=“en”>
	<head>
    <meta charset="utf-8" />
    <title>Draw Point (canvas version)</title>
  </head>
  
  <body onload="main()">
    <canvas id="example" width="640" height="480">
    Please use a browser that supports "canvas"
    </canvas>
    <script src="../lib/draw_base.js"></script>
    <script src="DrawPoint.js"></script>
  </body>
</html>

如上所示,定义了一个640*480的绘制区域,入口是main,引入draw_base.jsDrawPoint.js

2、再新建一个 DrawPoint.js 文件,代码如下:

function main() {
    var canvas = document.getElementById('example');
    if (!canvas) {
        console.log('Failed to retrieve the <canvas> element');
        return;
    }

    var ctx = canvas.getContext('2d');

    drawPixel(50, 150, ctx, {r:255,g:0,b:0});
    drawPixel(55, 150, ctx, {r:255,g:0,b:0});
    drawPixel(60, 150, ctx, {r:255,g:0,b:0});
    drawPixel(65, 150, ctx, {r:255,g:0,b:0});
    drawPoint(150, 150, 10, 10, ctx, {r:255,g:0,b:0});
    drawPoint(250, 150, 20, 20, ctx, {r:0,g:255,b:0});
    drawPoint(350, 150, 40, 40, ctx, {r:0,g:64,b:255});
}

其中,drawPixel(50, 150, ctx, {r:255,g:0,b:0}) 表示在坐标(50,15)处画一个红色像素;drawPoint(250, 150, 20, 20, ctx, {r:0,g:255,b:0}) 表示在坐标(250,150)处画一个长宽都为20像素的绿色点。

3、drawPixel和drawPoint方法的实现在 draw_base.js,代码如下:

function drawPixel(x, y, ctx, color) {
    drawPoint(x, y, 1, 1, ctx, color);
}

function drawPoint(x, y, sx, sy, ctx, color) {
    let r = Math.floor(color.r) % 256;
    let g = Math.floor(color.g) % 256;
    let b = Math.floor(color.b) % 256;
    ctx.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',1.0)';
    // ctx.fillStyle = 'rgba(255, 128, 0, 1.0)';
    ctx.fillRect(x, y, sx, sy);
}

如上所示,drawPixel 包装了 drawPoint 函数,drawPoint 最终调用 ctx.fillRect 实现绘制。
关于 ctx.fillRect 的详细用法可搜索 html5 文档,本文不再详述。

用浏览器打开ch01/DrawPoint.html文件,最终实现效果如下。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值