zoukankan      html  css  js  c++  java
  • 龙书dx9 纹理

    本章Cube例子与前面不同;使用了规范的类定义。

    笔记一:头文件中class  const static成员变量的问题:

    vertex.h:

    struct VertexT
    {
        VertexT(){}
        VertexT(float x,float y,float z,float nx,float ny,float nz,float u ,float v)
        {
            _x = x;_y = y;_z=z;
            _nx = nx; _ny = ny ; _nz = nz;
            _u=u;_v=v;
        }
        float _x,_y,_z;
        float _nx,_ny,_nz;
        float _u,_v;
        static const DWORD FVFT;
    };
    //const DWORD VertexT::FVFT= (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1);//方式2
    //#define  Vertex_FVF (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1)//方式1
    #endif // !__vertexH__

    例子里给的是方式1; 当我使用方式2的时候出现链接错误,error link1169 多个重定义的符号

    然后我在vertex.cpp里进行定义,正确:

    #include "vertex.h"
    const DWORD VertexT::FVFT= (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1);


    注意:1.不要试图在头文件.h里定义变量(除了extern全局外) 2.定义在.h的static变量,在不同cpp文件内,由于static的局部性,每个cpp内都会开辟自己的static变量;比如我在a.h里定义了static int a=0;在b.cpp、c.cpp里#include a.h ;那么,b.cpp和c.cpp里的static a变量没有任何关系。

    参考:http://bbs.csdn.net/topics/390720572?page=1

    3.编译是把源码变成机器指令;预编译只是代码间的处理;#include预编译;作用是把文件内容复制到当前;static 关键字在编译时申请静态空间

    4.#ifndef #endif 只是防止预编译时的相同头文件的重复复制而已;

    笔记二:纹理的mipmaps和filter

    原因:纹理的大小和屏幕三角形大小不一致。

    首先,建立mipmaps链,设定不同纹理等级,选取等级,确定我需要的纹理; 其次,通过设定的filter方式,来进行纹理与屏幕三角的匹配

    比如:

     Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);//第三步
     Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);//第二步 纹理被缩小
     Device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);//第一步

    纹理为:256*256建立mipmaps链:128*128,64*64,32*32... 假如三角形是100*100级别;
    根据第一步:mipmap filter设置的是D3DTEXF_POINT(最近选择方式),现在选择128*128;纹理在根据第二步,多个纹理单元对应一个三角单元,D3DTEXF_LINEAR线性纹理过滤方式;每个三角形像素对最接近他的2*2纹理点进行采样;并取平均值;

    参考:http://blog.csdn.net/kkk328/article/details/7055934

    疑问:但我不清楚,如果是纹理放大模式(第三步),D3DTEXF_LINEAR模式,这时候一个纹理单元对应多个像素点,怎么进行选取纹理2*2取均值呢?

    笔记三:纹理的四种寻址模式,

    原因:纹理坐标可以超出1的范围,比如vertex中uv坐标在0到3之间。

    几种模式:wrap(环绕)  、border边框模式(可自己设置)、clamp(截取(截取纹理在0到1范围内,并延伸边缘色))、mirror模式

  • 相关阅读:
    第一次会议(2019.3.4)
    改革春风吹满地小组~~成立了~~⭐😄~~
    PYQT5 系列(一)——参考自《弗兰克万岁》
    Springboot2.0学习笔记1__微服务及springboot的作用
    Java学习之---------------反射
    Jquery对select的操作 添加一个select
    匿名函数
    数据库迁移
    EF 未应用自动迁移,因为自动迁移会导致数据丢失的解决办法
    在Chrome+Visual Studio中调试asp.net程序很慢的问题(Firefox也有类似问题)
  • 原文地址:https://www.cnblogs.com/dust-fly/p/4149021.html
Copyright © 2011-2022 走看看