查看: 2984|回复: 3
打印 上一主题 下一主题

[Vray] 在3dsmax中创建一个vray 渲染的按钮

[复制链接]

2

主题

0

听众

40

积分

设计初学者

Rank: 1

纳金币
6
精华
0
跳转到指定楼层
楼主
发表于 2014-6-27 13:54:41 |只看该作者 |倒序浏览
我想在3dsmax中开发一个可实现vray 渲染的按钮,3dsmax插件这一块比较熟悉,但在Vray sdk for 3dsmax中没有介绍vray渲染的具体实现流程的demo,所以希望大家可以提供一些vray渲染具体实现流程的信息,谢谢大家
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

2

主题

0

听众

40

积分

设计初学者

Rank: 1

纳金币
6
精华
0
沙发
发表于 2014-6-27 19:58:49 |只看该作者
科技信息 发表于 2014-6-27 16:54
可以参考一下

您好,可以参考一下什么材料呢?能麻烦说一下么?谢谢
回复

使用道具 举报

2

主题

0

听众

40

积分

设计初学者

Rank: 1

纳金币
6
精华
0
板凳
发表于 2014-7-2 10:16:04 |只看该作者
我用了一个简单的替代方案,替代方案的思路大致如下:
首先,创建一个空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);
                               
回复

使用道具 举报

16

主题

1

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
3
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2014-7-25 22:24:02 |只看该作者
学习了, 多谢分享
回复

使用道具 举报

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

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-19 01:48 , Processed in 0.149499 second(s), 37 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部