设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1475|回复: 0

matlab练习程序(渲染三原色)

[复制链接]

30

主题

333

金钱

471

积分

入门用户

发表于 2019-7-12 16:49:42 | 显示全部楼层 |阅读模式

这里我用的空间是x向右为正,y向下为正,z向屏幕里面为正。相当于标准右手系绕x轴旋转了180度。

将三个点光源放在

r = [0.3,0,0.5];
g = [0.3,-0.5*cos(pi/6),-0.5*sin(pi/6)];
b = [0.3,0.5*cos(pi/6),-0.5*sin(pi/6)];

这三个位置上,向四周发射光线,取光线到y-z平面的模的倒数作为光的强度。

图像如下:
1.jpg
程序如下:
  1. clear all;

  2. close all;
  3. clc;

  4. r = [0.3,0,0.5];
  5. g =
  6. [0.3,-0.5*cos(pi/6),-0.5*sin(pi/6)];
  7. b =
  8. [0.3,0.5*cos(pi/6),-0.5*sin(pi/6)];
  9. imgr1=[];
  10. imgr2=[];
  11. imgg1=[];
  12. imgg2=[];
  13. imgb1=[];
  14. imgb2=[];

  15. for y=-1:0.004:1
  16. imgr1=[];
  17. imgg1=[];
  18. imgb1=[];  
  19. for z=-1:0.004:1      
  20.        pm=[0,y,z];         
  21.        lightr=pm-r;
  22.        lightg=pm-g;
  23.        lightb=pm-b;
  24.        imgr=1/norm(lightr);
  25.        imgg=1/norm(lightg);
  26.        imgb=1/norm(lightb);
  27.       
  28.        imgr1=[imgr1 imgr];
  29.        imgg1=[imgg1 imgg];      
  30.        imgb1=[imgb1 imgb];           
  31.   end
  32.    imgr2=[imgr2;imgr1];
  33.    imgg2=[imgg2;imgg1];  
  34.    imgb2=[imgb2;imgb1];
  35. end[h w]=size(imgr2);

  36. img=zeros(h,w,3);
  37. img(:,:,1) = mat2gray(imgr2);
  38. img(:,:,2) = mat2gray(imgg2);
  39. img(:,:,3) = mat2gray(imgb2);
  40. imshow(img)
  41. imwrite(img,'img.png')
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表