其然IT教育一直秉承“用良心做教育”的理念,致力于打造IT教育全产业链
人才服务平台,公司总部位于北京,目前已在深圳、上海、郑州、广州、大连、武汉、成都、西安、杭州、青岛、重庆、长沙、哈尔滨、南京、太原成
立了分公司,年培养优质人才20000余人,同期在校学员5000余人,合作院校超500所,合作企业超10000家,每年有数十万名学员受益于千锋互联组织
的技术研讨会、技术培训课、网络公开课及免费教学视频。
其然IT历程精彩纷呈,获得荣誉包括:中关村移动互联网产业联盟副理事长
单位、中国软件协会教育培训委员会认证一级培训机构、中关村国际孵化软件协会授权中关村移动互联网学院、教育部教育管理信息中心指定移动互联
网实训基地等。
其然IT教育面授课程包含HTML5大前端培训、JavaEE 分布式开发培训、
Python全栈 人工智能培训、全链路UI/UE设计培训、物联网 嵌入式培训、360网络安全、大数据 人工智能培训、全栈软件测试培训、PHP全栈 服务器
集群培训、云计算 信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证,采用全程面授高品质、高成本培养模式,教学大纲紧跟企业需求,拥
有全国一体化就业保障服务,成为学员信赖的IT职业教育品牌。
培训Java与自学Java的差距
我以前也是自学Java,在一家公司跟着别人学,以前是别人眼中的菜鸟,现
在是别人眼中的大神,Java很简单的,贵在坚持和多练,没必要花那培训钱。如果真的要去学的话,
选择Java培训机构要注意这两点基本上就能避免一些坑:
1. 老师没有正经公司工作经历,或者没有已经在线上正常运转的产品。一
些所谓培训班的老师水平往往比较一般,甚至还有培训出来后又接着培训别人的。
2、是不是会承诺帮你找到工作,要找到好的工作,不是靠别人给你保证的
,还是要靠自己提升能力。
建议多自己学习加上找些好的代码主动学习。例如github,多练习网上很多
网站里真正好的代码。作为Java工程师,可以多看看spring文档,看看很多已经成熟的框架,深入去体会。另外,学软件等等**好还是自己多学,找点
视频教程之类,也省点钱。
Direct3D---纹理映射
>//--------------------------------------------------------------------------------------
// 【纹理绘制四步曲之一】:顶点的定义
//--------------------------------------------------------------------------------------
struct CUSTOMVERTEX
{
FLOAT _x, _y, _z; // 顶点的位置
FLOAT _u, _v; // 纹理坐标
CUSTOMVERTEX(FLOAT x, FLOAT y, FLOAT z, FLOAT u, FLOAT v)
: _x(x), _y(y), _z(z), _u(u), _v(v) {}
};
//D3DFVF_TEX1: 一层纹理
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_TEX1)
// 【纹理绘制四步曲之二】:顶点的访问
//--------------------------------------------------------------------------------------
//填充顶点缓存
CUSTOMVERTEX* pVertices;
if( FAILED( g_pVertexBuffer->Lock( 0, sizeof(CUSTOMVERTEX), (void**)&pVertices, 0 ) ) )
return E_FAIL;
// 正面顶点数据
// 前3个数据为顶点位置,后2个数据为纹理坐标
pVertices[0] = CUSTOMVERTEX(-10.0f, 10.0f, -10.0f, 0.0f, 0.0f);
pVertices[1] = CUSTOMVERTEX( 10.0f, 10.0f, -10.0f, 2.0f, 0.0f);
pVertices[2] = CUSTOMVERTEX( 10.0f, -10.0f, -10.0f, 2.0f, 2.0f);
pVertices[3] = CUSTOMVERTEX(-10.0f, -10.0f, -10.0f, 0.0f, 2.0f);
// 背面顶点数据
pVertices[4] = CUSTOMVERTEX( 10.0f, 10.0f, 10.0f, 0.0f, 0.0f);
pVertices[5] = CUSTOMVERTEX(-10.0f, 10.0f, 10.0f, 2.0f, 0.0f);
pVertices[6] = CUSTOMVERTEX(-10.0f, -10.0f, 10.0f, 2.0f, 2.0f);
pVertices[7] = CUSTOMVERTEX( 10.0f, -10.0f, 10.0f, 0.0f, 2.0f);
// 顶面顶点数据
pVertices[8] = CUSTOMVERTEX(-10.0f, 10.0f, 10.0f, 0.0f, 0.0f);
pVertices[9] = CUSTOMVERTEX( 10.0f, 10.0f, 10.0f, 2.0f, 0.0f);
pVertices[10] = CUSTOMVERTEX( 10.0f, 10.0f, -10.0f, 2.0f, 2.0f);
pVertices[11] = CUSTOMVERTEX(-10.0f, 10.0f, -10.0f, 0.0f, 2.0f);
// 底面顶点数据
pVertices[12] = CUSTOMVERTEX(-10.0f, -10.0f, -10.0f, 0.0f, 0.0f);
pVertices[13] = CUSTOMVERTEX( 10.0f, -10.0f, -10.0f, 2.0f, 0.0f);
pVertices[14] = CUSTOMVERTEX( 10.0f, -10.0f, 10.0f, 2.0f, 2.0f);
pVertices[15] = CUSTOMVERTEX(-10.0f, -10.0f, 10.0f, 0.0f, 2.0f);
// 左侧面顶点数据
pVertices[16] = CUSTOMVERTEX(-10.0f, 10.0f, 10.0f, 0.0f, 0.0f);
pVertices[17] = CUSTOMVERTEX(-10.0f, 10.0f, -10.0f, 1.0f, 0.0f);
pVertices[18] = CUSTOMVERTEX(-10.0f, -10.0f, -10.0f, 1.0f, 1.0f);
pVertices[19] = CUSTOMVERTEX(-10.0f, -10.0f, 10.0f, 0.0f, 1.0f);
// 右侧面顶点数据
pVertices[20] = CUSTOMVERTEX( 10.0f, 10.0f, -10.0f, 0.0f, 0.0f);
pVertices[21] = CUSTOMVERTEX( 10.0f, 10.0f, 10.0f, 1.0f, 0.0f);
pVertices[22] = CUSTOMVERTEX( 10.0f, -10.0f, 10.0f, 1.0f, 1.0f);
pVertices[23] = CUSTOMVERTEX( 10.0f, -10.0f, -10.0f, 0.0f, 1.0f);
g_pVertexBuffer->Unlock();
//--------------------------------------------------------------------------------------
// 【纹理绘制四步曲之三】:纹理的创建
//--------------------------------------------------------------------------------------
// 创建纹理
//g_pd3dDevice: D3Drect3D设备对象
//L"pal5q.jpg": 创建纹理的图标文件名字的字符串
//0: 创建纹理对象的宽度,0表示使用贴图宽度
//0: 创建纹理对象的高度,0表示使用贴图高度
//6: 创建纹理的渐进级别
//0: 纹理的使用方式,一般是0
//D3DFMT_X8R8G8B8: 纹理中保存每个颜色成分所使用的位数
//D3DPOOL_MANAGED: 如何管理纹理,一般为D3DPOOL_MANAGED
//D3DX_DEFAULT: 图像像素的过滤方式
//D3DX_DEFAULT: Mip像素过滤方式
//0xFF000000: 透明色,设定这个颜色,在显示时,这图像中的这个颜色将忽略
//0: 记录载入图片信息,通常为NULL
//0: 记录调色板信息,通常为NULL
//g_pMipTexture: 保存**终创建的纹理
D3DXCreateTextureFromFileEx(g_pd3dDevice, L"pal5q.jpg", 0, 0, 6, 0, D3DFMT_X8R8G8B8,
D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0xFF000000, 0, 0, &g_pMipTexture);
//各向异性过滤
//设置**大各项异性的程度值
g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAXANISOTROPY, 3);
//0: 为哪一层纹理设置采样状态
//D3DSAMP_MAGFILTER: 对哪种纹理采样属性进行操作,设置放大过滤器
//D3DTEXF_ANISOTROPIC: 对第二个属性进行值的设定
g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC);
//D3DSAMP_MINFILTER: 对哪种纹理采样属性进行操作,设置缩小过滤器
g_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC);
//线性纹理过滤
//g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
//g_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
//**近点采样过滤
//g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);
//g_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT);
//渐进纹理过滤
//g_pd3dDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
//g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAXMIPLEVEL, 16);
//--------------------------------------------------------------------------------------
// 【纹理绘制四步曲之四】:纹理的启用
//--------------------------------------------------------------------------------------
//0: 指定了应用纹理是哪一层
//g_pMipTexture: 将要启用纹理的IDrect3DBaseTexture9接口对象,为第二步中定义过的g_pMipTexture参数
g_pd3dDevice->SetTexture(0, g_pMipTexture); //启用纹理
**步为全局变量
第二步与第三步位于函数Objects_Init()中,Objects_Init()是渲染资源初始化函数,在此函数中进行要被渲染的物体的资源的初始化
Objects_Init()调用位置:Direct3D_Init()末尾,即Direct3D初始化完成后。
Direct3D_Init():Direct3D初始化函数,进行Direct3D的初始化。
Direct3D_Init()调用位置:Windows窗口创建后,即函数CreateWindow()后面
**后一步位于函数Direct3D_Render()中,Direct3D_Render()是使用Direct3D进行渲染的函数,位于该函数的“【Direct3D渲染五步曲之三】:正式绘制,利用顶点缓存绘制图形 ”中
Direct3D_Render()调用位置: 窗口过程函数WndPRoc()中,接收到消息WM_PAINT后
设置纹理的寻址方式:
// 根据键盘按键的按下,设置为纹理寻址方式
if (g_pDInput->IsKeyDown(DIK_1)) //键盘上1键被按下
{
// 设置重复纹理寻址模式
g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP);
g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);
}
if (g_pDInput->IsKeyDown(DIK_2)) //键盘上2键被按下
{
// 设置镜像纹理寻址模式
g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_MIRROR);
g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_MIRROR);
}
if (g_pDInput->IsKeyDown(DIK_3)) //键盘上3键被按下
{
// 设置夹取纹理寻址模式
g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);
}
if (g_pDInput->IsKeyDown(DIK_4)) //键盘上4键被按下
{
// 设置边框纹理寻址模式
g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);
g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);
}
位于函数Direct3D_Update()中
Direct3D_Update(): 不是即时渲染代码但是需要即时调用的,如按键后的坐标的更改,都放在这里。
Direct3D_Update()调用位置:
WinMain中的消息循环过程:
//【5】消息循环过程
MSG msg = { 0 }; //初始化msg
while( msg.message != WM_QUIT ) //使用while循环
{
if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) ) //查看应用程序消息队列,有消息时将队列中的消息派发出去。
{
TranslateMessage( &msg ); //将虚拟键消息转换为字符消息
DispatchMessage( &msg ); //该函数分发一个消息给窗口程序。
}
else
{
Direct3D_Update(hwnd); //调用更新函数,进行画面的更新
Direct3D_Render(hwnd); //调用渲染函数,进行画面的渲染
}
}
相关推荐:
苏州JAVA培训 苏州JAVA培训班 苏州JAVA培训机构