Welcome to od|forum

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.

Macha

Members
  • Content count

    1,709
  • Joined

  • Last visited

  • Days Won

    25

Community Reputation

98 Excellent

1 Follower

About Macha

  • Rank
    Grand Master
  • Birthday 07/04/1975

Contact Methods

  • Website URL http://japanoramia.blogspot.com/

Personal Information

  • Name Marc
  • Location Pixar Canada
  • Interests Mostly everything + walking about

Recent Profile Visitors

14,788 profile views
  1. Thanks, that looks like it works! (with i++)
  2. I make a detail attribute called orids const char * attName= "orids"; GA_RWAttributeRef oridsAtt = gdp->findIntTuple(GA_ATTRIB_GLOBAL, attName, setSize); if (!oridsAtt.isValid()) { oridsAtt = gdp->addIntTuple(GA_ATTRIB_GLOBAL, attName, setSize); } GA_RWHandleI oridsHandle(oridsAtt.getAttribute()); and I want to populate it from values that I have stored in a set. I probably have to convert the set to an array, but whatever I try, I cannot set the values except for the first array item. For example, as a test, this will just set the first array item to 5 and leave all others on 0: GA_Size gasize(setSize); GA_Offset gaoffset; int test[] = {1,2,3,4,5}; oridsHandle.setBlock(gaoffset, gasize, test); I also tried looping over the set and setting the attribute that way: int i=0; for (set<int>::iterator it=oridsSet.begin();it!=oridsSet.end(); ++it) { oridsHandle.set(GA_Offset(i++),*it); } But again, it only sets the value in the very first array position. How do I set array detail attributes?
  3. I have the same problem. I came up with this. It is not very good, cumbersome and stupid but maybe it helps a little: //load image IMG_File *file = IMG_File::open("/data/app/sci6_x86_64/Houdini/13.0.399/hfs/houdini/pic/DOSCH_SKIESV2_01SN_lowres.rat"); UT_PtrArray<PXL_Raster *> images; file->readImages(images); // get res int xRes = file->getStat().getXres(); int yRes = file->getStat().getYres(); // test uvs float u = 0.4297; float v = 0.4824; float xu = u*(xRes-1); float yv = v*(yRes-1); // get pixel values float vals[3]; images[0]->getPixelValue(xu,yv,vals); for (int k=0;k<3;++k) cout << "Pixelval at " << xu << ", " << yv << " = " << vals[k] << endl; file->close();
  4. Thanks Claus, that works quite well. I've only come back to this now. I'm thinking of using the uvs I get from the hitpoints to read pixels from an image.I don't see anything obvious in the HDK about images and uvs. Is anybody aware of a sample code somewhere?
  5. You forgot his willy.
  6. I shoot rays from gdp to gdp2 and check if they intersect. If they do intersect then I would like to evaluate a texture map on gdp2. I can get the hit positions, but how would I get the values of the texturemap at those points? This is what I have to get the hit positions: GA_FOR_ALL_PTOFF(gdp, ptoff) { // searchdir attribs UT_Vector3 searchdir; tupleN->get(hN.getAttribute(), ptoff, searchdir.data(), 3); GU_RayIntersect *myCollision = new GU_RayIntersect; myCollision->init(gdp2); GU_RayInfo hitInfo(searchdir.normalize()); hitInfo.reset(); UT_Vector4 pos(gdp->getPos3(ptoff)); int hitNum = myCollision->sendRay(pos, searchdir, hitInfo); if(hitNum) { const GEO_Primitive *hitPrim = hitInfo.myPrim; fpreal32 hitU = hitInfo.myU; fpreal32 hitV = hitInfo.myV; //get pos of hit UT_Vector4 hitPos; hitPrim->evaluateInteriorPoint(hitPos, hitU, hitV); } delete myCollision; }//GA_FOR_ALL_PTOFF
  7. Well, that's a start! I never noticed the slides!
  8. Maybe this is a little silly but can somebody explain on a higher conceptual level how points and attributes are represented internally in Houdini? I've sort of memorized how to iterate over points and attributes, reading and writing them with the HDK, etc, but I'm not really clear as to the why's. For example, what is the difference between point offsets and indices and why do we use offsets when iterating? How are points represented in memory, how is the data structured? A lot of answers to these questions are scattered throughout the hdk documentation but a bit of an Idiot's Guide to it would be welcome by many I'm sure.
  9. *bump*
  10. Does anybody know if we can use arrays as fields in structs? Something like this: struct mydata { float theta; float phi; vector vec; float values[]; } Eventually I want to have an array xs of mydata with each xs.values being initialized to a particular size. mydata xs[];
  11. Looks to me as if all handles related to voxel arrays in inlinecpp are spewing out errors related to boost?
  12. No, none of these includes are sufficient. From the examples it looks like they should, but it doesn't work, at least with the inlinecpp stuff.
  13. Thanks Rick, I've been looking at those before but can't get it to work. I can't even find the right includes for the UT_VoxelArrayIterator, and I have tried a lot of them. It makes me think it is an inlinecpp specific problem. That's why I am asking for a short example.
  14. Does anybody have a short example of inlinecpp that iterates over an existing volume? Thanks.
  15. I've actually got a really annoying problem with inlinecpp. Very often I get a compile error: GeometryPermissionError: Geometry is read-only. You cannot pass a read-only hou.Geometry object to a function expecting a non-const GU_Detail * But the code all looks fine. I then have to exit Houdini, close the shell, reopen, restart and the whole thing works again. Has anybody experienced this?