找回密码
 立即注册

QQ登录

只需一步,快速开始

vray材质库
查看: 3508|回复: 6

如何在3dsmax中创建一个vray 渲染的按钮

[复制链接]

该用户从未签到

2

主题

7

回帖

72

积分

新手上路

积分
72
发表于 2014-6-27 14:24:00 | 显示全部楼层 |阅读模式
我想在3dsmax中开发一个可实现vray 渲染的按钮,3dsmax插件这一块比较熟悉,但在Vray sdk for 3dsmax中没有介绍vray渲染的具体实现流程的demo,所以希望大家可以提供一些vray渲染具体实现流程的信息,谢谢大家
.....提示:网站下载资源都有备份,如遇到下载地址失效请及时联系管理员(QQ:3459039404)恢复下载地址(个别无法恢复会退币)

该用户从未签到

1406

主题

576

回帖

3万

积分

版主

积分
35854

青龙徽章朱雀徽章

发表于 2014-6-27 17:12:00 | 显示全部楼层
这个比较专业啊!
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

7

回帖

72

积分

新手上路

积分
72
 楼主| 发表于 2014-6-27 20:19:00 | 显示全部楼层
谢谢您的回复,您在这方面有什么看法么?
回复 支持 反对

使用道具 举报

该用户从未签到

1406

主题

576

回帖

3万

积分

版主

积分
35854

青龙徽章朱雀徽章

发表于 2014-6-28 10:23:00 | 显示全部楼层
以下是引用kopfly在2014-06-27 20:19:00的发言:
谢谢您的回复,您在这方面有什么看法么?

目前看还不知道你想开发什么功能 是预先设置好vray参数的渲染工具吗?

回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

7

回帖

72

积分

新手上路

积分
72
 楼主| 发表于 2014-6-30 10:13:00 | 显示全部楼层
嗯 就是在定制的函数里面把vray渲染器设为3ds max的当前渲染器,并执行渲染的工作
回复 支持 反对

使用道具 举报

该用户从未签到

2440

主题

1233

回帖

8万

积分

论坛元老

积分
84591
发表于 2014-7-1 09:03:00 | 显示全部楼层
支持 希望早日看到成果
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

7

回帖

72

积分

新手上路

积分
72
 楼主| 发表于 2014-7-1 18:57:00 | 显示全部楼层
我用了一个简单的替代方案,替代方案的思路大致如下: 首先,创建一个空max档,在这个max档中设置好了vray的渲染参数,并将单位等信息设置与需要渲染的max档相同。 然后,采用3ds max sdk创建一个utilities插件,该插件有一个执行渲染的按钮,在该按钮的响应函数中执行如下操作: 1、用LoadFromFile加载上一步创建的空max档 2、用MergeFromFile将需要渲染的max档合并至空max档中,这两步的意图就是想让需要渲染的max档可以使用vray渲染器 3、最后采用Interface7接口的OpenRenderer、RendererRenderFrame、CloseRenderer执行渲染工作 示例代码如下: //加载采用vray渲染器的空max档 std::string fname = "E:/Workstation/FaceIdentify/AssignToVrayRender.max"; Interface7* ip = GetCOREInterface7(); WIN32_FIND_DATA fdt; HANDLE hFile = FindFirstFile(string2wstring(fname).c_str(), &fdt); if (hFile != INVALID_HANDLE_VALUE) { ip->LoadFromFile(string2wstring(fname).c_str(), TRUE); } //将需要渲染的max档合并进来 std::string fname1 = "E:/Workstation/FaceIdentify/Test.max"; WIN32_FIND_DATA fdt1; HANDLE hFile1 = FindFirstFile(string2wstring(fname1).c_str(), &fdt1); if (hFile1 != INVALID_HANDLE_VALUE) { ip->MergeFromFile(string2wstring(fname1).c_str(), TRUE,TRUE, FALSE,MERGE_DUPS_DELOLD); } //获取当前渲染器,也就是vray渲染器 Renderer* render = NULL; render = GetCOREInterface7()->GetRenderer(RS_Production,true); //遍历max档中的各节点,获取到相机的节点,用以计算出相机的ViewParams IGameScene * m_pIgame; m_pIgame = GetIGameInterface(); IGameConversionManager * cm = GetConversionManager(); cm->SetCoordSystem(IGameConversionManager::IGAME_MAX); m_pIgame->InitialiseIGame(false); m_pIgame->SetStaticFrame(0); int nTopLevelNodeCount = m_pIgame->GetTopLevelNodeCount(); INode* cameraNode = NULL; for(int loop = 0; loop != nTopLevelNodeCount;loop++) { IGameNode * pGameNode = m_pIgame->GetTopLevelNode(loop); //check for selected state - we deal with targets in the light/camera section if(pGameNode->IsTarget()) continue; string sName = wstring2string(pGameNode->GetName()); string::size_type idx = sName.find("Camera"); if (idx != string::npos) { cameraNode = pGameNode->GetMaxNode(); break; } } ViewParams vp_; TimeValue t = ip->GetTime(); //计算出相机的ViewParams GetViewParams(cameraNode, vp_, t); //依次调用OpenRenderer、RendererRenderFrame、CloseRenderer完成渲染工作 ip->OpenRenderer(render,&vp_,RENDTYPE_NORMAL,0,0); BitmapInfo bi; bi.SetName(_T("")); bi.SetWidth(640); bi.SetHeight(480); bi.SetType(BMM_TRUE_32); Bitmap* map = TheManager->Create(&bi); ip->RendererRenderFrame(render,t,map,0,1.0f,0,0); ip->CloseRenderer(render);
回复 支持 反对

使用道具 举报

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

本版积分规则

室内设计工具箱

QQ|手机版|Archiver|室内人 ( 辽ICP备05022379号 )

GMT+8, 2024-5-29 02:20

Powered by Discuz! X3.5关于室内人 | QQ:3459039404(客服) | Email:snren_com@163.com

© 2001-2024 Discuz! Team.

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